如何更改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上没有显示任何内容。
我对此很陌生,如果你能引导,我感激不尽。
我想你在找
-
JTextField
的setText()
方法。 - 编写 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 ( 这是一些例子)