Показать JPanel на JFrame из другого класса - PullRequest
0 голосов
/ 14 января 2019

Использование NetBeans IDE и Java, с которыми я не слишком знаком. У меня есть JFrame с JPanel на нем, и сказал, что на JPanel есть кнопки. Этот JPanel находится в классе JFrames. Когда нажата одна из этих кнопок, я хочу прекратить отображать эту JPanel и отобразить другую JPanel в другом классе. Я использую конструктор GUI, поэтому панели находятся в разных классах.

Событие buttonclick в классе JFrame для одной из моих кнопок:

    private void buttonActionPerformed(ActionEvent e) {                                         
    panel1.setVisible(false);
    Panel2 panel2 = new Panel2();
    this.add(panel2);
    panel2.setVisible(true);

Это приводит к исчезновению панели 1, но остается пустой Jframe, так как панель 2 не отображается.

Я посмотрел на CardLayout, но мне нужны кнопки на панелях для выдачи команд, а не кнопки на другой панели, меняющиеся вокруг панелей CardLayout.

РЕДАКТИРОВАТЬ: переписать вопрос, чтобы фактически обеспечить контекст, а не просто "помочь PLS", как мне сказали, что то, что я спрашивал, было слишком широким, что совершенно правильно. Я только начал изучать Java, так что если это все еще вызывает широкий интерес, прошу прощения.

1 Ответ

0 голосов
/ 14 января 2019

Давайте попробуем немного помочь здесь ...

Прежде всего, не стоит делать больше, чем «почти» ничего в коде слушателя действия. Особенно создание экземпляра нового объекта панели в этом слушателе - плохая идея.

Более разумный подход: создайте все свои объекты панели заранее . Например: когда ваше приложение появляется, возможно, у вас есть список необходимых объектов панели. А затем, в своем коде слушателя действия, просто добавьте тот, который должен появиться, и удалите тот, который больше не требуется.

Также обратите внимание:

  • все, что вы «делаете» в обработчике действий, происходит в потоке диспетчера событий (воспользуйтесь этим термином Google). здесь, это, вероятно, то, что вы хотите, но очень часто это не так.
  • просто вызова setVisible () недостаточно. Возможно, вам придется запустить менеджер раскладки, чтобы сделать перерисовку. Таким образом, определитесь с конкретным менеджером компоновки и исследуйте динамическое добавление / скрытие компонентов.
...