更改 JFormattedTextField 中的 MaskFormatter

问题描述 投票:0回答:1

我正在java上做一个简单的登录应用程序,其中用户输入是一个具有MaskFormatter的JFormattedTextField。我想要做的是 JFormattedTextField 失去焦点想要删除 MaskFormatter (因为我有一个“占位符”)并在再次获得焦点时添加 MaskFormatter (因此 MaskFormatter 仅在用户实际处于JFormattedTextField。我发现添加 MaskFormatter 的唯一方法是通过构造函数。下面是一些代码:

usuario = new JFormattedTextField(new MaskFormatter("########U"));
usuario.addFocusListener(this);
usuario.setBounds(64, 182, 267, 24);
usuario.setBorder(null);
usuario.setText("Introduce tu nombre de usuario");
usuario.setForeground(new Color(204, 204, 204));
usuario.setFont(new Font("Cascadia Code", Font.PLAIN, 11));
contentPane.add(usuario);
@Override
    public void focusGained(FocusEvent e) {
        if (usuario == e.getSource()) {
                        // set MaskFormatter here
            if (usuario.getText().equals("Introduce tu nombre de usuario")) {
                usuario.setText("");
                usuario.setForeground(Color.BLACK);
            }
        }
    }
@Override
    public void focusLost(FocusEvent e) {
        if (usuario == e.getSource()) {
                        // remove MaskFormatter here
            if (usuario.getText().equals("")) {
                usuario.setText("Introduce tu nombre de usuario");
                usuario.setForeground(new Color(204, 204, 204));
            }
        }
    }

我尝试使用 setFormatterFactory 方法解决问题,但我不知道它是如何工作的,也无法在互联网上找到任何内容

java swing jformattedtextfield
1个回答
0
投票

我有一个“占位符”

也许您可以使用文本提示,其设计目的是在未输入文本时在文本字段中显示“提示文本”。

该代码无法像 JFormattedTextField 一样工作,因为格式化文本字段似乎会根据掩码的大小向文档添加空格。

在上面类的

checkForPrompt()
方法中你可以尝试将代码更改为:

String text = "";

try
{
    text = document.getText(0, document.getLength()).trim();
}
catch (BadLocationException e) {}

//  Text has been entered, remove the prompt

if (text.length() > 0)
//if (document.getLength() > 0)

看看它是否按照您想要的方式工作。

© www.soinside.com 2019 - 2024. All rights reserved.