高级格式化的文本字段input操作?

首先,我知道我以前曾经提过一个类似的问题,但是这个问题是不一样的。 我正在试图制作一个计算器,使所有在可编辑文本字段中input的数字的算术平均值。 我有大约25个文本字段,但是一次只能编辑14-16个字符。 用户有3个jspinners来添加或删除一些已经在程序中的可编辑的文本字段。 我的问题是,你怎么能检查哪些文本字段可以编辑这些25和操纵数据?

为了节制目的,这个问题与另一个不同。 在另一个问题,我没有具体的,这是不同的,所以请留下这个开放我需要帮助。

一次解决一个问题。 从一个实例开始。 将其更改为处理多个字段,如下所示。 find平均值现在是对update()的简单更改。

图片

 import java.awt.EventQueue; import java.awt.GridLayout; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.NumberFormat; import java.util.ArrayList; import java.util.List; import javax.swing.JFormattedTextField; import javax.swing.JFrame; import javax.swing.JPanel; /** * @see https://stackoverflow.com/q/8703464/230513 * @see https://stackoverflow.com/questions/6803976 */ public class Adder extends JPanel { private static final int MAX = 3; private final List<JFormattedTextField> fields = new ArrayList<JFormattedTextField>(); private final NumberFormat format = NumberFormat.getNumberInstance(); private final JFormattedTextField sum = new JFormattedTextField(format); public Adder() { this.setLayout(new GridLayout(0, 1)); for (int i = 0; i < MAX; i++) { JFormattedTextField tf = init(); fields.add(tf); this.add(tf); } sum.setHorizontalAlignment(JFormattedTextField.RIGHT); sum.setEditable(false); sum.setFocusable(false); this.add(sum); } private JFormattedTextField init() { JFormattedTextField jtf = new JFormattedTextField(format); jtf.setValue(0); jtf.setHorizontalAlignment(JFormattedTextField.RIGHT); jtf.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { EventQueue.invokeLater(new Runnable() { @Override public void run() { update(); } }); } }); jtf.addPropertyChangeListener("value", new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent e) { update(); } }); return jtf; } private void update() { long total = 0; for (JFormattedTextField tf : fields) { Number v = (Number) tf.getValue(); total += v.longValue(); } sum.setValue(total); } private void display() { JFrame f = new JFrame("Adder"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new Adder().display(); } }); } }