2015-10-17 3 views
-2
if (cardPanel.getComponent(0) != null) cardPanel.remove(0); 

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

+1

Контейнер не может иметь нулевые компоненты – MadProgrammer

+1

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

ответ

2

Вы можете использовать:

cardPanel.removeAll(); 

Там нет необходимости проверять, есть ли какие-либо компоненты на панели.

2

Удалить только JPanel? Вы можете попробовать это:

Component[] components = cardPanel.getComponents();  
for(Component c : components) 
    if(c instanceof JPanel) 
     cardPanel.remove(c); 
+0

(1) Зачем изобретать велосипед? – camickr

+0

@camickr С вашим решением cardPanel.removeAll(), насколько вы уверены, что все существующие компоненты являются JPanels? – user3437460

+0

Мы придавали особое значение словам «который представляет собой панель». Кажется, вы думаете, что это означает, что вы можете удалить JPanels, но сохраните JTextFields, JButtons и т. Д. Попытка понять контекст всего вопроса, а не только 3 слова, я склонен думать, что это означает, что переменная «cardPanel - это JPanel», и поэтому OP пытается удалить что-либо на cardPanel. Должен признать, что я пропустил ваш чек, чтобы увидеть, был ли компонент JPanel перед его удалением. Я не могу удалить голосование, если ответ не изменен. – camickr

0

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

boolean isComponentInPanel (компонентный компонент) { return java.util.Arrays.asList (panel.getComponents()) .contains (component); }

+0

'где компонент удален и пуст JPanel' - этот оператор не имеет смысла. Если панель пуста, нет компонента для удаления, поэтому ничего не произойдет. Нет необходимости в проверке. И если вы сделали проверку, вы просто используете метод getComponentCount(), это метод removeAll(). – camickr

+0

У меня были ошибки, когда он был пуст ... так что-то случилось. –

+0

Ваш код является неправильным. Если вы просто используете метод removeAll(), вы не получите ошибок. Прочтите комментарий о проблеме XY. Вы делаете что-то странное в своей программе, а затем делаете что-то странное, чтобы попытаться исправить проблему. Когда у вас возникла проблема, отправьте код, демонстрирующий проблему. Минимальный код, демонстрирующий проблему, называется [SSCCE] (http://sscce.org/). Отправьте «SSCCE» с каждым вопросом, чтобы мы могли видеть, что вы делаете, и поэтому нам не нужно угадывать контекст вашего вопроса. – camickr

Смежные вопросы