Java - добавить компонент Swing во время выполнения со ссылочным именем? - PullRequest
4 голосов
/ 26 ноября 2010

В настоящее время я работаю над приложением, которое добавляет 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 ]

2 голосов
/ 26 ноября 2010
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 голос
/ 26 ноября 2010

Нет, нет, вам нужно добавить их в список, чтобы позже вы могли получить их все.

Где-то в вашем классе вам это нужно:

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 ...
}
1 голос
/ 26 ноября 2010

Насколько я знаю, это невозможно.Другой (и, возможно, более точный) способ сделать это - сохранить метки, когда вы создаете их, например,

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

. Затем вы можете использовать fieldList для доступа к нужным текстовым полям:

JTextField label = fieldList.get(row);

Редактировать: fieldList - это, конечно,

List<JTextField>

.

...