在Java GUI中实时添加JTextFields中的值

时间:2016-06-12 07:44:45

标签: java swing

我正在编写Java GUI程序。我有两个JTextField: 'txtNet'和'txtExcise'。我希望在输入这两个文本字段后立即添加值,并在不使用按钮的情况下将结果填充到另一个文本字段“txtTotal”中。

1 个答案:

答案 0 :(得分:1)

  

我希望在输入后立即添加这两个文本字段中的值   并在不使用的情况下将结果填充到另一个文本字段“txtTotal”中   一个按钮。

可以使用JTextField上的DocumentListener来完成此操作。

这是一个教程,涵盖了如何使用它们的基础知识:How to Write a Document Listener

教程的重要摘录:

  

当文档内容发生变化时,会发生文档事件   方式

这将允许您监视文本字段值的更改并做出相应的反应。对于您的情况,这将涉及检查2个输入的值,并且两者都有效,在输出文本字段中显示结果

这是一个快速的SSCCE(Stack overflow glossary of acronyms):

public class AutoCalculationDemo {
    public static void main(String[] args) {
        JTextField firstInput = new JTextField();
        JTextField secondInput = new JTextField();
        JTextField output = new JTextField();
        output.setEditable(false);

        DocumentListener additionListener = new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
                attemptAddition();
            }

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

            @Override
            public void changedUpdate(DocumentEvent e) {
                attemptAddition();
            }

            public void attemptAddition(){
                try{
                    double firstValue = Double.parseDouble(firstInput.getText());
                    double secondValue = Double.parseDouble(secondInput.getText());
                    output.setText(String.valueOf(firstValue + secondValue));
                }catch (NumberFormatException nfe){
                    System.out.println("Invalid number(s) provided");
                }
            }
        };
        firstInput.getDocument().addDocumentListener(additionListener);
        secondInput.getDocument().addDocumentListener(additionListener);

        JFrame frame = new JFrame();
        JPanel panel = new JPanel(new GridLayout(3,2));
        panel.add(new JLabel("First number: "));
        panel.add(firstInput);
        panel.add(new JLabel("Second number: "));
        panel.add(secondInput);
        panel.add(new JLabel("Output: "));
        panel.add(output);
        frame.add(panel);
        frame.setSize(250,150);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}