manipulación avanzada de entrada de campo de texto formateado?

Antes que nada, sé que hice una pregunta similar antes, pero esta es diferente. Estoy tratando de hacer una calculadora que haga la media aritmética de todos los números que fueron ingresados ​​en los campos de texto que son editables . Tengo alrededor de 25 campos de texto; sin embargo, solo se pueden editar de 14 a 14 a la vez. El usuario tiene 3 jspinners para agregar o eliminar algunos campos de texto editables que ya están en el progtwig. Mi pregunta es, ¿cómo se puede verificar qué campos de texto son editables de esos 25 y manipular los datos?

Para fines de moderación, esta pregunta es diferente a la otra. En la otra pregunta, no era específico en absoluto, y era diferente, así que por favor, deje este abierto. Necesito ayuda.

Resuelve un problema a la vez. Comience con un ejemplo de trabajo. Cámbielo para manejar múltiples campos, como se muestra a continuación. Encontrar el promedio ahora es un cambio simple para update() .

imagen

 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 fields = new ArrayList(); 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(); } }); } }