Пользовательский класс JFrame не отображается - PullRequest
0 голосов
/ 17 октября 2018

Это компилируется нормально, но ничего не видно при выполнении кода.Что мне нужно изменить?

Я удалил импорт Swing / AWT, чтобы можно было опубликовать вопрос.Код короткий и поэтому мой вопрос, но, видимо, этого не достаточно ...

class Exercise1 {
    public static void main(String[] args) {
        new MyFrame("Test");
    }
}

class MyFrame extends JFrame{
    public MyFrame(String title){
        super(title);
        int i = 2;
        int j = 2;
        JPanel[][] panelHolder = new JPanel[i][j];    
        setLayout(new GridLayout(i,j));
        for(int m = 0; m < i; m++) {
            for(int n = 0; n < j; n++) {
                panelHolder[m][n] = new JPanel();
                add(panelHolder[m][n]);
            }
        }
        JTextField t1 = new JTextField();
        JTextField t2 = new JTextField();
        JTextField t3 = new JTextField();
        panelHolder[2][0].add(t1);
        panelHolder[2][1].add(t2);
        panelHolder[2][2].add(t3);
        setVisible(true);
    }
}

1 Ответ

0 голосов
/ 17 октября 2018

Это прекрасно компилируется, но при выполнении кода ничего не видно.

Поскольку вы получаете исключение времени выполнения.

Индексы массива основаны на 0.

    int i = 2;
    int j = 2;
    JPanel[][] panelHolder = new JPanel[i][j];   

Вы создаете двумерный массив с комнатой для 2 значений в каждой из 2 строк.

    panelHolder[2][0].add(t1);
    panelHolder[2][1].add(t2);
    panelHolder[2][2].add(t3);

Но вы пытаетесь добавить компоненты в третью строку / значение, что приводит кИсключение.

Измените размеры массива на 3 или используйте только индексы 0 и 1.

Кроме того, при создании JTextField используйте:

new JTextField(10);

, поэтомуТекстовые поля имеют разумный размер.

...