Java:根据动态生成的文本字段名称更改变量?

标签 java swing variables dynamic jtextfield

我有一个带有变量“优先级”的 TrainingClass 对象的 ArrayList。

我正在制作一个设置框架,其中对于 ArrayList 中当前的每个元素,我制作一个 TextField,用户在其中设置优先级。

这就是它的生成方式

for (TrainingClass tclass : mTrainingClasses) {
                  //Loop the ArrayList
        JTextField txtPriority = new JTextField(3);
        txtPriority.setBounds(10,10,100,20);
        txtPriority.setText("" + tclass.getPriority());
        getContentPane().add(txtPriority);
 }

现在我要添加一个更改监听器,但是...

一旦我知道哪个字段已更改,我如何访问 ArrayList mTrainingClasses 的正确元素?

例如,在 php 中,我只需制作如下内容:

 $mTrainingClasses->$changed_field->setPriority($new_value);

但是,据我所知,我无法在 Java 中做到这一点。那么,我应该如何进行呢?

我需要手动设置每个元素的字段名称和监听器吗?我确信还有其他解决方案,但目前我不知道。

(我知道我也可以使用 ArrayList 作为字段,例如

txtPriority.add(new JTextField(3));

但是在这种情况下,我如何知道哪个索引对应于已更改的字段呢? )

最佳答案

有一个文本字段列表

List<JTextField> textFields = new ArrayList<JTextField>();

更改循环,如下所示,将所有文本字段添加到上面的列表中

for (TrainingClass tclass : mTrainingClasses) {
        //Loop the ArrayList
        JTextField txtPriority = new JTextField(3);
        txtPriority.setBounds(10,10,100,20);
        txtPriority.setText("" + tclass.getPriority());
        getContentPane().add(txtPriority);
        textFields.add(txtPriority);
}

在您的监听器中,您可以执行以下操作

mTrainingClasses.get(textFields.indexOf((JtextField) event.getSource()));

上面将返回更改后的 TrainingClass。

关于Java:根据动态生成的文本字段名称更改变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13507594/

相关文章:

java - 如何替换Java中xml模板中的第n次出现?

java - JTextField 无法正常工作

javascript - 引用对象方法时是否应将其存储在变量中? (JavaScript)

c++ - 变量名中的美元符号?

variables - 在 switch 语句 powershell 中测试 4 个不同的变量

java - tomcat7不读取上下文xml文件

java - 如何从静态方法销毁 Activity?

java - 如何从对象列表中提取 K "smallest"元素?

java - JButton如何设置滚动图标边界

Java Swing : JTree DefaultMutableTreeNode not updating