处理 JTextField 中的编辑事件
Handling editing events in a JTextField
我有一个登录表单,用户可以在其中输入他的凭据进行登录。我有一个 JLabel
用于显示告诉用户用户名不能为空的文本。当文本字段为空时用户单击登录按钮后显示此标签。
我希望当用户开始在文本字段中输入时,带有信息的标签应该 disappear.How 我能实现这种行为吗?
代码如下:
public class JTextFiledDemo {
private JFrame frame;
JTextFiledDemo() {
frame = new JFrame();
frame.setVisible(true);
frame.setSize(300, 300);
frame.setLayout(new GridLayout(4, 1));
frame.setLocationRelativeTo(null);
iniGui();
}
private void iniGui() {
JLabel error = new JLabel(
"<html><font color='red'> Username cannot be empty!<></html>");
error.setVisible(false);
JButton login = new JButton("login");
JTextField userName = new JTextField(10);
frame.add(userName);
frame.add(error);
frame.add(login);
frame.pack();
login.addActionListener((ActionEvent) -> {
if (userName.getText().equals("")) {
error.setVisible(true);
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JTextFiledDemo tf = new JTextFiledDemo();
}
});
}
}
您必须创建 DocumentListener:
DocumentListener dl = new DocumentListener()
{
@Override
public void insertUpdate(DocumentEvent de)
{
error.setVisible(false);
}
@Override
public void removeUpdate(DocumentEvent de)
{
//
}
@Override
public void changedUpdate(DocumentEvent de)
{
error.setVisible(false);
}
};
然后对于您的文本字段:
login.getDocument().addDocumentListener(dl);
为此,您需要在 JTextField
上使用 DocumentListener
,这里是 tutorial。
例如:
userName.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent de){
event(de);
}
@Override
public void removeUpdate(DocumentEvent de) {
event(de);
}
@Override
public void changedUpdate(DocumentEvent de){
event(de);
}
private void event(DocumentEvent de){
error.setVisible(de.getDocument().getLength() == 0);
// as mentioned by nIcE cOw better to use Document from parameter
frame.revalidate();
frame.repaint();
}
});
error
必须是final
(对于java低于8的版本)。
此外,在开始时您的字段是空的,因此可能需要在 error
标签上使用 setVisible(true)
。
您可以在输入框添加keyListener
userName.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent arg0) {
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyPressed(KeyEvent arg0) {
error.setVisible(false);
}
});
我有一个登录表单,用户可以在其中输入他的凭据进行登录。我有一个 JLabel
用于显示告诉用户用户名不能为空的文本。当文本字段为空时用户单击登录按钮后显示此标签。
我希望当用户开始在文本字段中输入时,带有信息的标签应该 disappear.How 我能实现这种行为吗?
代码如下:
public class JTextFiledDemo {
private JFrame frame;
JTextFiledDemo() {
frame = new JFrame();
frame.setVisible(true);
frame.setSize(300, 300);
frame.setLayout(new GridLayout(4, 1));
frame.setLocationRelativeTo(null);
iniGui();
}
private void iniGui() {
JLabel error = new JLabel(
"<html><font color='red'> Username cannot be empty!<></html>");
error.setVisible(false);
JButton login = new JButton("login");
JTextField userName = new JTextField(10);
frame.add(userName);
frame.add(error);
frame.add(login);
frame.pack();
login.addActionListener((ActionEvent) -> {
if (userName.getText().equals("")) {
error.setVisible(true);
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JTextFiledDemo tf = new JTextFiledDemo();
}
});
}
}
您必须创建 DocumentListener:
DocumentListener dl = new DocumentListener()
{
@Override
public void insertUpdate(DocumentEvent de)
{
error.setVisible(false);
}
@Override
public void removeUpdate(DocumentEvent de)
{
//
}
@Override
public void changedUpdate(DocumentEvent de)
{
error.setVisible(false);
}
};
然后对于您的文本字段:
login.getDocument().addDocumentListener(dl);
为此,您需要在 JTextField
上使用 DocumentListener
,这里是 tutorial。
例如:
userName.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent de){
event(de);
}
@Override
public void removeUpdate(DocumentEvent de) {
event(de);
}
@Override
public void changedUpdate(DocumentEvent de){
event(de);
}
private void event(DocumentEvent de){
error.setVisible(de.getDocument().getLength() == 0);
// as mentioned by nIcE cOw better to use Document from parameter
frame.revalidate();
frame.repaint();
}
});
error
必须是final
(对于java低于8的版本)。
此外,在开始时您的字段是空的,因此可能需要在 error
标签上使用 setVisible(true)
。
您可以在输入框添加keyListener
userName.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent arg0) {
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyPressed(KeyEvent arg0) {
error.setVisible(false);
}
});