键入

时间:2016-01-02 16:02:14

标签: java swing

我有JTextFieldJLabel;如果用户键入特殊字符,例如/,我希望JLabelsetVisible(true)

我希望在没有用户按任何按钮的情况下完成此操作,但实时"实时"当输入完成时,对于插入的每个新字符,将进行检查。我该怎么办?

1 个答案:

答案 0 :(得分:2)

使用DocumentListener的简单解决方案:

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class DemoFrame extends JFrame {

    JTextField tf;
    JLabel lbl;

    public DemoFrame() {
        tf = new JTextField(10);
        lbl = new JLabel("Test");
        tf.getDocument().addDocumentListener(new DemoDocumentListener());
        lbl.setVisible(false);

        this.setLayout(new FlowLayout(FlowLayout.LEFT));
        this.add(tf);
        this.add(lbl);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(500, 100);
        this.setVisible(true);
    }

    public void checkForSpecialString() {
        if (tf.getText().contains("/")) {
            lbl.setVisible(true);
        } else {
            lbl.setVisible(false);
        }
    }

    class DemoDocumentListener implements DocumentListener {
        @Override
        public void insertUpdate(DocumentEvent e) {
            checkForSpecialString();
        }
        @Override
        public void removeUpdate(DocumentEvent e) {
            checkForSpecialString();
        }
        @Override
        public void changedUpdate(DocumentEvent e) {
            checkForSpecialString();
        }
    }

    public static void main(String[] args) {
        new DemoFrame();
    }
}