Java - 在运行时使用引用名称添加Swing组件?

时间:2010-11-26 16:03:39

标签: java swing reference runtime

我目前正在开发一个应用程序,它在运行时使用以下命令将JTextFields添加到面板:

int rowCounter = 1;             
pnlRows.add(new JLabel("Row " + rowCounter));
pnlRows.add(new JTextField(20));
pnlRows.revalidate();
validate();

我遇到的问题是我想在方法中使用它们的值,但无法引用它们。

有没有办法按照以下方式做点什么:

int i = 1;
JTextField row + i = new JTextField();
i++;

因此,每次运行TextField时,将分别称为row1,row2,row3。

谢谢。

3 个答案:

答案 0 :(得分:2)

public List<JTextField> rows = new Linkedlist<JTextField>();

addRow() {
    JTextField field = new JTextField(20);
    rows.add(field);
    pnlRows.add(new JLabel("Row " + rows.size()));
    pnlRows.add(field);
    pnlRows.revalidate();
    validate();
}

答案 1 :(得分:1)

据我所知,这是不可能的。另一种(也许更简洁)的方法是在创建标签时存储标签

JTextField label = new JTextField(20);
fieldList.add(label);
pnlRows.add(label);

然后,您可以使用fieldList访问所需的文本字段:

JTextField label = fieldList.get(row);

编辑:fieldList是

List<JTextField>

当然。

答案 2 :(得分:1)

不,没有,您需要做的是将它们添加到列表中,以便以后可以全部获取它们。

你班上的某个地方需要这个:

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

然后,当他们添加它们时,你可以这样做:

int rowCounter = fields.size()+1;             
pnlRows.add(new JLabel("Row " + rowCounter));
JTextField field = new JTextField(20);
pnlRows.add(field);
fields.add(field);
pnlRows.revalidate();
validate();

然后最后你想要得到它们你可以迭代列表并逐个获取所有文本字段。

for(JTextField field : fields){
    dostuff ...
}