Как удалить компонент из JFrame, который использует BorderLayout - PullRequest
4 голосов
/ 04 августа 2009

Контейнер использует BorderLayout. У меня есть JPanel, который я добавил в ЦЕНТР. Однако у JPanel нет имени переменной.

Я мог бы сделать content.remove (nameofPanel)

Но так как я добавил это как это content.add (новый CustomJPanel (), BorderLayout.CENTER);

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

Как мне это сделать?

Ответы [ 4 ]

6 голосов
/ 04 августа 2009

Хотя ответ Карла, вероятно, лучший, менее приятная альтернатива, если по какой-то причине вы не можете изменить исходный вызов add ():

contents.remove(((BorderLayout)getLayout()).getLayoutComponent(BorderLayout.CENTER));
contents.add(someNewPanel);

Хотя, если вы считаете, что вам нужно это сделать, вы можете сделать шаг назад и оценить, почему вы пытаетесь это сделать.

5 голосов
/ 04 августа 2009

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

contents.add(new CustomJPanel(), BorderLayout.CENTER);

становится

nameOfPanel = new CustomJPanel();
contents.add(nameOfPanel, BorderLayout.CENTER);
1 голос
/ 05 августа 2009

Или вы можете перечислить все элементы в контейнере с помощью функции http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Container.html#getComponents() и искать вашу панель по другому атрибуту (если можете).

Атрибут http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#getName() полезен для этой цели, например, Вы устанавливаете имя для своей панели перед вставкой и можете использовать это имя в качестве ключа поиска.

0 голосов
/ 14 августа 2009

Я настоятельно рекомендую вам объявить глобальную переменную CustomJPanel, создать ее экземпляр на первой панели, а затем добавить панель. Когда вы хотите удалить его, вы используете тот же объект. Затем вы назначаете новый объект переменной и добавляете его таким же образом.

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

...