有没有办法检查特定行中的字段是否已更改而不为每个字段编写监听器?

时间:2017-06-20 13:19:01

标签: java listener

我有一个对话框,允许用户动态添加字段行。每行包含8个字段(组合框和格式化文本字段)以及一个按钮,单击该按钮会添加一行新的空字段。是否有一种简单的方法可以检测特定行中的任何字段是否已被修改?我不想为每一行中的每一个字段创建一个监听器,但我没有看到任何其他方法。如果这是唯一的方法是有一些限制我可能会听到太多的听众? TIA。

1 个答案:

答案 0 :(得分:1)

要确定控件的内容是否已被更改,您需要添加一个监听器。期。

通过将您使用的每个组件扩展到实现自己的事件的自定义组件(但总是相同的事件,如“ContentChanged”),或者采用Java 8 Consumer函数,您可以使您的生活更轻松。只要内容发生变化就会调用 像

protected void textChanged( String changedText ) {
    // Collect all changes here
}

JTextField textField = new MyTextField( text -> textChanged( text ) );

private class MyTextField extends JTextField {
    private final Consumer<String> textChangedConsumer;

    public MyTextField( Consumer<String> textChangedConsumer ) {
        super();
        this.textChangedConsumer = textChangedConsumer;

        getDocument().addDocumentListener( new DocumentListener() {

            @Override
            public void removeUpdate( DocumentEvent e ) {
                textChangedConsumer.accept( getText() );
            }

            @Override
            public void insertUpdate( DocumentEvent e ) {
                textChangedConsumer.accept( getText() );
            }

            @Override
            public void changedUpdate( DocumentEvent e ) {
                textChangedConsumer.accept( getText() );
            }
        } );
    }
}

每次需要文本字段时都使用此类,并且有一种常用方法来收集更改。同样为JComboBoxes做同样的事情。让所有人都指向你的textChanged方法。