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