Как очистить эту панель и добавить новые панели - PullRequest
1 голос
/ 21 апреля 2011

У меня есть один основной JPanel контейнер и три JPanels внутри.Как очистить эту панель и добавить новые панели?Я пробовал с remove(Component), но это не работает.Кто-нибудь может дать мне совет?

Ответы [ 5 ]

3 голосов
/ 21 апреля 2011

Это сделает это.Хитрость заключается в вызове revalidate.

mainPanel = ...

mainPanel.removeAll();
mainPanel.add(newPanel1);
mainPanel.add(newPanel2);
mainPanel.add(newPanel3);
mainPanel.revalidate();  

Но на самом деле, рассмотрите возможность использования CardLayout, если вы хотите изменить то, что появляется в JPanel.

2 голосов
/ 21 апреля 2011

Здесь, в этой ссылке я нашел простое руководство по добавлению и удалению элементов с панелей.Другие панели внутри вашей основной панели также являются элементами, поэтому к ним применяется тот же принцип.

Хорошей практикой при добавлении чего-то нового на панель является не просто использование метода add (): мы также можем захотеть использовать revalidate () и repaint () Они должны вызываться, когда происходит какое-то событие (нажатие кнопки или подобное ...)

Также я хочу упомянуть, что в уроке remove (), который я использую для удаления элементов, вы делаете это правильно.Возможно, при повторном вызове revalidate () и repaint () для других панелей удаленная панель исчезает из графического интерфейса пользователя (объект удаляется, только графический интерфейс не обновляется)

Примечание: я полагаю, что элементы ваших внутренних панелей видимы = true.Если некоторые из внутренних элементов испытывают затруднения при рендеринге, попробуйте также вызвать у них revalidate () и repaint () .Я думаю, что этот способ должен работать.

1 голос
/ 21 апреля 2011

@ Гарри Джой

если вы добавили или удалили (уже видимый контейнер), то вам нужно позвонить

revalidate(); repaint(); // not required in all cases

@ Дамир если JComponents не является публичной (или частной) статической, тогда вы можете просто позвонить

myContainer.removeAll();
myContainer.revalidate();
nyCOntainer.repaint();

возможно это удалить JComponent (s) по некоторым параметрам с Component[] a = myContainer.getComponents();, тогда вы можете вызвать if (components[i] instanceof JComboBox) { ...

1 голос
/ 21 апреля 2011

Попробуйте другой метод удаления remove(int index);

0 голосов
/ 08 июля 2017

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

panelName.setVisible(false);
mainPanel.remove(panelName);

В моем случае panelName - это JPanel, которая находится внутри mainPanel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...