Как добавить несколько панелей с метками в один кадр?

Я изучаю Java Swings, и я создаю один фрейм, и я хочу добавить к нему более одной панели с разными ориентациями, как вы видите ниже в коде jpanet_1 а также jpanel_2 каждый из них имеет определенные размеры, установленные с помощью setBound() метод.

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

    jFrame_2.add(jPanel_2);
    jFrame_2.add(jPanel_1);

Но затем "привет мир" добавляется только в panel_2.

  1. Пожалуйста, дайте мне знать, как добавить две панели в рамку, чтобы на обоих

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

фильм

КОД:

  public class GUI_01 {

JFrame jFrame_1;
JFrame jFrame_2;
JPanel jPanel_1;
JPanel jPanel_2;
final JLabel jLabel_Hello = new JLabel("Hello World");
JOptionPane jOptions;
final String[] options = {"yes", "no", "maybe"};

public GUI_01() {
    // TODO Auto-generated constructor stub
    setUpGUI1();
    setUpGUI2();
}

private void setUpGUI2() {
    // TODO Auto-generated method stub
    jFrame_2 = new JFrame("Border Demo");
    jPanel_1 = new JPanel();
    jPanel_2 = new JPanel();

    jPanel_1.setBorder(BorderFactory.createTitledBorder("title"));
    jPanel_1.setBounds(30, 100, 110, 300);
    jPanel_1.add(jLabel_Hello);

    jPanel_2.setBorder(BorderFactory.createLoweredBevelBorder());
    jPanel_2.setBounds(20, 50, 120, 80);
    jPanel_2.add(jLabel_Hello);

    jFrame_2.setBounds(0, 0, 600, 600);
    jFrame_2.add(jPanel_1);
    jFrame_2.add(jPanel_2);
    jFrame_2.setVisible(true);
}

2 ответа

Решение

проблема во время выполнения, "привет мир" появляется только на второй панели и не отображается в

Это правильно. Компонент может иметь только одного родителя.

Если вам нужен текст "Hello World", вам нужно создать два JLabels и добавить одну из меток на каждую панель.

JLabel label1 = new JLabel("Hello World");
JPanel panel1 = new JPanel();
panel1.add( label1 );
JLabel label2 = new JLabel("Hello World");
JPanel panel2 = new JPanel();
panel2.add( label2 );

Я пытался использовать gridlayout, но я не мог поместить jpanel в определенную ячейку gridlayout..

Вы не можете просто добавлять компоненты в случайные ячейки. У вас должны быть компоненты в каждой ячейке, или в случае GridBagLayout компонент может охватывать несколько ячеек.

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

Другие вопросы по тегам