Добавить элемент управления программно для формирования в Java - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь добавить простое управление в форму с помощью кода.У меня

public main(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();
    this.setLayout(new java.awt.BorderLayout());

    JPanel pnl = new JPanel();
    pnl.setLayout(new BorderLayout());
    pnl.setBackground(Color.red);
    pnl.setSize(500, 500);
    add(pnl, BorderLayout.CENTER);
    pnl.setVisible(true);
}

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

1 Ответ

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

Вы не упоминаете макет, который использует текущий контейнер, но, скорее всего, это GroupLayout, макет, связанный со сборщиком графического интерфейса пользователя NetBeans, который не учитывает ограничения / константы BorderLayout.Вам нужно переосмыслить компоновку всего вашего графического интерфейса, особенно если вы собираетесь смешивать компоновщики компоновщика графического интерфейса IDE с макетами с ручным кодированием.Эту смесь можно сделать, но она требует осторожности - создайте свой JPanels для создателя графического интерфейса, создайте свои собственные JPanels, созданные вручную, а затем объедините их в основные JPanel (ы), которые используют соответствующие макеты.все детали будут зависеть от того, что вы пытаетесь создать, чего мы не знаем в данный момент.

Возможно, это вас смущает:

JPanel pnl = new JPanel();
pnl.setLayout(new BorderLayout()); // (A)
// ....
add(pnl, BorderLayout.CENTER);  // (B)

Линия (A)устанавливает макет для pnl равным BorderLayout
. Строка (B) добавляет pnl к позиции BorderLayout.CENTER * текущего контейнера , снова того, который, вероятно,не использует BorderLayout (предположение, поскольку вы никогда не показываете или не говорите нам).

Кроме того, вы вызываете pack() после добавления всех компонентов в окно верхнего уровня и перед его отображением?Вам следует.

Также обратите внимание, что это просто не нужно, поскольку JPanel видим по умолчанию:

pnl.setVisible(true);
...