Не могу увидеть JPanel в JFrame, в котором он содержится - PullRequest
0 голосов
/ 10 июня 2019

Я не могу найти свой JPanel в JFrame после компиляции, для фрейма установлено значение BorderLayout, а для панели установлено значение CENTER, но при его запуске панель не отображается. Чего-то не хватает в моем коде?

    JFrame mainWindow = new JFrame("Francisco's System");
    mainWindow.setBounds(10,10,1024,700);

    borderEncode = BorderFactory.createTitledBorder("Encode Module");
    borderBackup = BorderFactory.createTitledBorder("Backup Module");
    borderRestore = BorderFactory.createTitledBorder("Restore Module");
    lbl_testpanel1 = new JLabel("This is the Encode Panel");
    lbl_testpanel2 = new JLabel("This is the Backup Panel");
    lbl_testpanel3 = new JLabel("This is the Restore Panel");
    mb = new JMenuBar();
    menu1 = new JMenu("Functions");
    menu2 = new JMenu("Help");
    menu1_encode = new JMenuItem("Encode");
    menu1_backup = new JMenuItem("Backup");
    menu1_restore = new JMenuItem("Restore");
    panelEncode = new JPanel();
    panelBackup = new JPanel();
    panelRestore = new JPanel();
    panelMain = new JPanel();

    menu1_encode.addActionListener(control);
    menu1_backup.addActionListener(control);
    menu1_restore.addActionListener(control);

    menu1.add(menu1_encode);
    menu1.add(menu1_backup);
    menu1.add(menu1_restore);
    mb.add(menu1);
    mb.add(menu2);

    mainWindow.setLayout(new BorderLayout());

    panelEncode.setLayout(new FlowLayout());
    panelEncode.add(lbl_testpanel1);
    panelEncode.setBorder(borderEncode);

    panelBackup.setLayout(new FlowLayout());
    panelBackup.add(lbl_testpanel2);
    panelBackup.setBorder(borderBackup);

    panelRestore.setLayout(new FlowLayout());
    panelRestore.add(lbl_testpanel3);
    panelRestore.setBorder(borderRestore);

    panelMain.setLayout(new FlowLayout());
    panelMain.setBorder(BorderFactory.createLineBorder(Color.blue));
    panelMain.setBackground(Color.red);

    mainWindow.add(panelMain, BorderLayout.CENTER);
    mainWindow.add(mb);
    mainWindow.setJMenuBar(mb);

    mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);`enter code here`
    mainWindow.setVisible(true);
}

Я ожидаю, что панель появится и охватит ширину и высоту рамки, но она не отображается.

1 Ответ

1 голос
/ 10 июня 2019

Я не знаю, что там было не так, но это сработало

mainWindow.add(panelMain, BorderLayout.CENTER);
mainWindow.add(mb);

Приведенные выше два утверждения - это одно и то же. Если вы не укажете ограничение, то BorderLayout по умолчанию будет использовать «CENTER».

В любой заданной области в BorderLayout можно добавить только один компонент.

Таким образом, добавление строки меню заменяет существующий компонент, которым является ваша панель управления.

...