我将回答这个问题:我不会为此目的使用documentListener,因为在我看来这是用于该工作的错误工具。一方面,它
在用户仍在向JTextField 输入数据(尚未完成的数据)的同时不断地监听和更新结果。更好的方法是使用
添加到JButton或JTextFields中的ActionListener。
我想您可以使用FocusListener,但由于它是非常底层的,所以这也令我感到担忧。
另外:考虑使用InputVerifier验证您的输入。
另外:考虑在JTable中显示表格数据,其中第一列和第二列是可编辑的,而其他列则不可。
编辑
我不确定这是否符合要求,但是如果您从验证程序中进行计算,则可以使用。例如,为了一般性而更新:
import javax.swing.*;public class VerifierEg { private static final String ZERO = "0.0"; private JTextField field1 = new JTextField(ZERO, 5); private JTextField field2 = new JTextField(ZERO, 5); private JTextField resultField = new JTextField(ZERO, 10); private void createAndShowGui() { resultField.setEditable(false); resultField.setFocusable(false); JPanel mainPanel = new JPanel(); final JTextField[] fields = {field1, field2}; mainPanel.add(field1); mainPanel.add(new JLabel(" x ")); mainPanel.add(field2); mainPanel.add(new JLabel(" = ")); mainPanel.add(resultField); for (JTextField field : fields) { field.setInputVerifier(new MyInputVerifier(field)); } Jframe frame = new Jframe("VerifierEg"); frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); frame.getContentPane().add(mainPanel); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } private void calcProduct() { double d1 = Double.parseDouble(field1.getText()); double d2 = Double.parseDouble(field2.getText()); double prod = d1 * d2; resultField.setText(String.valueOf(prod)); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { VerifierEg eg = new VerifierEg(); eg.createAndShowGui(); } }); } private class MyInputVerifier extends InputVerifier { private JTextField field; private double value; public MyInputVerifier(JTextField field) { this.field = field; } @Override public boolean shouldYieldFocus(JComponent input) { if (verify(input)) { field.setText(String.valueOf(value)); calcProduct(); return true; } else { field.setText(ZERO); field.selectAll(); return false; } } @Override public boolean verify(JComponent input) { try { value = Double.parseDouble(field.getText()); return true; } catch (NumberFormatException e) { return false; } } }}


