Как установить текст для связки JButton из другого JFrame с циклом? - PullRequest
0 голосов
/ 26 мая 2018

У меня 36 JButton компонентов в сетке на JFrame, и я хочу установить их текст в 1, 2, 3 ... 36, когда я открываю фрейм из меню, находящегося в другом фрейме.(Позже мне придется рандомизировать их количество.)

Кнопки имеют похожие названия:

jButton1
jButton2
jButton3
...
jButton35
jButton36

Чтобы просто изменить текст первой кнопки на 1, это:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    grid gr = new grid();
    grid.jButton1.setText("1");
    gr.setVisible(true);
}

Есть ли способ что-то вроде этого?:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    grid gr = new grid();
    String number;

    for (int i=1; i<37; i++) {
        number=Integer.toString(i);
        grid.jButton<i>.setText(number);
    }
    gr.setVisible(true);
}

Я нашел эти ссылки, но они были не очень полезны, так как мои кнопки не находятся ни в каком массиве или списке, и они меняют тексты из того же фрейма, или нет другого пути?:

Назначение переменных с динамическими именами в Java

Как задать каждый JButton в макете кнопки сетки 10 x 10уникальный идентификатор / имя

Как переименовать набор кнопок J?

1 Ответ

0 голосов
/ 26 мая 2018

Создайте ArrayList типа JButton, добавьте в него JButton, итерируйте, используя цикл for-each, и присвойте значения.Этот код работает для меня.

    JFrame frame = new JFrame();
    frame.setSize(400, 500);
    frame.setVisible(true);
    frame.setLayout(null);

    ArrayList<JButton> buttons = new ArrayList<JButton>();
    JButton b1= new JButton();
    JButton b2= new JButton();
    JButton b3= new JButton();
    JButton b4= new JButton();
    JButton b5= new JButton();

    buttons.add(b1);
    buttons.add(b2);
    buttons.add(b3);
    buttons.add(b4);
    buttons.add(b5);
    int count = 1;
    for(JButton b: buttons)
    {
        b.setText(String.valueOf(count));
        b.setBounds(0,count*50,50,30);
        frame.add(b);
        count++;
    }
...