如何更改JTextField的值?

我正在尝试使用JFrame和Swing构建一个Java应用程序,我有5个JTextField实例。 其中一个是Sum。

我需要在文本字段中输入一些数字时自动更改JTextField

怎么可能?

我写的是这里。

 private void displaytotalActionPerformed(java.awt.event.ActionEvent evt) { // display total: Float num1,num2,num3,num4,num5,num6,result; num1 = display1b.getText().equals("") ? 0 : Float.parseFloat(display1b.getText()); num2 = display2b.getText().equals("") ? 0 : Float.parseFloat(display2b.getText()); num3 = display3b.getText().equals("") ? 0 : Float.parseFloat(display3b.getText()); num4 = display4b.getText().equals("") ? 0 : Float.parseFloat(display4b.getText()); num5 = display5b.getText().equals("") ? 0 : Float.parseFloat(display5b.getText()); num6 = display6b.getText().equals("") ? 0 : Float.parseFloat(display6b.getText()); result = num1+num2+num3+num4+num5+num6; System.out.println(result); } 

我试图获得总和并使用按钮在此文本字段中显示它并且它工作。 但我希望它能自动完成。 但上面的代码在textfield上没有显示任何内容。

我对此很陌生,如果你能引导,我感激不尽。

我想你在找

  • JTextFieldsetText()方法。
  • 编写 DocumentListener以了解文本何时更改并对其应用总和
  • 编写 DocumentFilter以确保程序不会因输入与数字不同而崩溃。

另一种方法是使用JFormattedTextField并使用侦听器。

一些建议。

  • 开发直觉,通常属于java类的属性由(get|set)Property 。 使用像Netbeans这样的IDE,它可以帮助你找到东西。
  • 自动化通常通过使用监听器来实现,只需了解何时使用(这也是直觉的一部分)。
  • 当您发现自己编写重复代码时,请考虑使用函数。 即

而不是有6次:

 display1b.getText().equals("") ? 0 : Float.parseFloat(display1b.getText()); 

考虑将您的字段放在ArrayList并编写一个迭代它们的函数,并使用上面的一行来设置所有值。

  • 在进行额外的硬编码工作之前,请遵循JavaTutorials ,或在此处提问 。 对你来说会更有成效。 因为您将学习如何为自己学习并深入学习文档。

您需要使用附加到每个数字字段的DocumentListener 。 这将在字段更改时提醒您。

从那里你需要调用某种sum方法来自动更新计数。

就像是…

 public class AutoSum { public static void main(String[] args) { new AutoSum(); } public AutoSum() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new AutoSumPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class AutoSumPane extends JPanel { private JTextField[] fields; private JTextField tally; public AutoSumPane() { fields = new JTextField[5]; DocumentListener docHandler = new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { autoSum(); } @Override public void removeUpdate(DocumentEvent e) { autoSum(); } @Override public void changedUpdate(DocumentEvent e) { autoSum(); } }; setLayout(new GridLayout(6, 1)); for (int index = 0; index < 5; index++) { fields[index] = new JTextField(3); fields[index].getDocument().addDocumentListener(docHandler); fields[index].setHorizontalAlignment(JTextField.RIGHT); add(fields[index]); } tally = new JTextField(3); tally.setHorizontalAlignment(JTextField.RIGHT); tally.setEditable(false); add(tally); } protected float getValue(JTextField field) { float value = 0; String text = field.getText(); if (text != null && text.trim().length() > 0) { try { value = Float.parseFloat(text.trim()); } catch (Exception e) { e.printStackTrace(); } } return value; } protected void autoSum() { float sum = 0; for (JTextField field : fields) { sum += getValue(field); } tally.setText(NumberFormat.getNumberInstance().format(sum)); } } } 

例如。

有关更多信息,请参阅如何编写DocumentListener 。

当你在它的时候,你可能会发现实现一个感兴趣的DocumentFilter ( 这是一些例子)