如果填写文本字段,请设置启用按钮

时间:2014-05-25 15:19:27

标签: java swing button listener jtextfield

我的文字字段很少。如果用户填写所有文本字段,如何启用按钮,如果用户删除了某些内容则禁用我正在使用Swing。

2 个答案:

答案 0 :(得分:1)

由于swing基于MVC,因此您可以使用模型对象并聆听更改。

public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));

        JTextField textField1 = new JTextField(30);
        JTextField textField2 = new JTextField(30);
        JTextField textField3 = new JTextField(30);
        JButton jButton = new JButton("Button");

        ButtonModel model = jButton.getModel();
        Document document1 = textField1.getDocument();
        Document document2 = textField2.getDocument();
        Document document3 = textField3.getDocument();

        ButtonEnablement buttonEnablement = new ButtonEnablement(model);
        buttonEnablement.addDocument(document1);
        buttonEnablement.addDocument(document2);
        buttonEnablement.addDocument(document3);

        contentPane.add(textField1);
        contentPane.add(textField2);
        contentPane.add(textField3);
        contentPane.add(jButton);

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

}

每当Document更改ButtonEnablement时,Document会查看所有ButtonModel并启用public class ButtonEnablement implements DocumentListener { private ButtonModel buttonModel; private List<Document> documents = new ArrayList<Document>(); public ButtonEnablement(ButtonModel buttonModel) { this.buttonModel = buttonModel; } public void addDocument(Document document) { document.addDocumentListener(this); this.documents.add(document); documentChanged(); } public void documentChanged() { boolean buttonEnabled = false; for (Document document : documents) { if (document.getLength() > 0) { buttonEnabled = true; break; } } buttonModel.setEnabled(buttonEnabled); } @Override public void insertUpdate(DocumentEvent e) { documentChanged(); } @Override public void removeUpdate(DocumentEvent e) { documentChanged(); } @Override public void changedUpdate(DocumentEvent e) { documentChanged(); } }

ButtonModel

使用DocumentJButton代替JTextField和{{1}}的好处是,您可以轻松更改具体实施,而不必担心关于ui组件如何更新,因为它们在模型更改时会自动更新。

答案 1 :(得分:0)

您可以设置事件侦听器以查看文本字段何时更改。如果字段为空,则禁用该按钮:

field1.addKeyListener(new KeyAdapter() {
        public void keyReleased(KeyEvent e) { //watch for key strokes
            if(field1.getText().length() == 0 || field2.getText().length() == 0)
                button.setEnabled(false);
            else
            {
                Button.setEnabled(true);
            }
        }
 });

这里的策略是:

  1. 注意您的字段上的任何击键。您需要为字段2(以及您可能拥有的任何其他字段)复制此事件侦听器。
  2. 默认您的按钮被禁用,因为字段为空
  3. 如果字段的字符数为零,请禁用该按钮。否则,启用它。