java - 如何在Swing中控制JButton?

标签 java swing jbutton actionlistener

我正在研究 Swing 的 GUI。

我有一个 JPanel: 4 JTextField 和一个 JButton 里面。

当所有四个 JTextField 都不为空时,该按钮将启用。当四个文本字段中的任何一个为空时,按钮应该被禁用。

我的解决方案是: addDocumentListener 用于所有 4 个文本文件。当其中一个文本字段更改时,我将检查所有 4 个文本字段并决定是否启用该按钮。
它有效但看起来很丑....

private void buttonAlter() {
    if( !textField1.getText().isEmpty() && !textField2.getText().isEmpty() && !textField3.getText().isEmpty() && !textField4.getText().isEmpty()) {
        button.setEnabled(true);
    }else {
        button.setEnabled(false);
    }
}

//for all the textfields
textField1.getDocument().addDocumentListener(new DocumentListener() {
    @Override
    public void insertUpdate(DocumentEvent e) {
        buttonAlter();
    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        buttonAlter();
    }

    @Override
    public void changedUpdate(DocumentEvent e) {

    }
});

我们还有其他更好的方法来做这件事吗?

非常感谢。

最佳答案

重用您的代码,不要重复自己。

收集所有文本字段:

Collection<JTextField> textFields = Arrays.asList(textField1, textField2, textField3, textField4);

稍后您可以使用它来启用/禁用:

private void buttonAlter() {
    boolean allFilled = true;
    for (JTextField textField : textFields)
         allFilled &= !textField.getText().isEmpty();

    button.setEnabled(allFilled);
}

对于听众:

// create one, single listener, store it in a variable
DocumentListener listener = new DocumentListener() {
    @Override
    public void insertUpdate(DocumentEvent e) {
        buttonAlter();
    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        buttonAlter();
    }

    @Override
    public void changedUpdate(DocumentEvent e) {

    }
}

// use that same listener for all textFields
for (JTextField textField : textFields)
     textField.getDocument().addDocumentListener(listener);

关于java - 如何在Swing中控制JButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34924693/

相关文章:

java 相当于 perl URI::QueryParam 模块

java - 了解如何将 JButton 添加到 JTable

java - 如何获取 JComponent 的副本?

java - 为什么要为 logger.debug() 使用额外的 if 条件?

java - Bean 的 CDI @TransactionAttribute

java - spring如何知道使用哪个连接池?

java - Swing MVC JTextPane 以及其他人通常使用的

java - JTextArea 和 DocumentFilter

java - 在 Swing App 中检测 CTRL+V 但保留原始功能

Java JButton和swing问题