2013-08-01 2 views
12

У меня есть приложение поворота, в котором я показываю изображения в JPanel. Если приложение не может создать изображение, я хочу удалить предыдущий из JPanel и заменить его на JTextField и сообщение. Я могу добавить текстовое поле, но оно нарисовано поверх предыдущего содержимого, которое само является подклассом JPanel. Вот что у меня есть:JPanel removeAll не избавляется от предыдущих компонентов

private void displayMessage(String message) { 
    JTextField tf = new JTextField(message); 
    cdPanel.removeAll(); 
    cdPanel.add(tf, BorderLayout.NORTH);//tried lots of variations, inc. no layout  
    cdPanel.validate(); 
} 

Как я могу заставить cdPanel полностью перерисовать себя?

+0

Если бы вы пытались вызова 'cdPanel.revalidate(); cdPanel.repaint() 'вместо' cdPanel.validate() '? Более того, как отображаются изображения на этом «JPanel»? Вы используете 'JLabel' или рисуете их непосредственно на' JPanel'? –

+1

@nIcEcOw спасибо, что работает отлично. Пожалуйста, опубликуйте, чтобы я мог отметить ваш ответ :-) – jaybee

+0

Вы НАСТОЯЩИМ ДОБРО ПОЖАЛОВАТЬ И СОХРАНЯТЬ СМОТРЕТЬ :-) Но, пожалуйста, со следующего раза, постарайтесь предоставить информацию в полной мере, как если бы вы объясняли ее ребенку, что вы делаете? __, __Что вы ожидаете? __ и __Что точно произошло? __ Таким образом, тот, кто отвечает, сможет лучше понять ситуацию в данной ситуации :-) –

ответ

25

Вы можете просто попробовать позвонить:

cdPanel.revalidate(); 
cdPanel.repaint(); // This is required in some cases 

вместо

cdPanel.validate(); 
+1

Спасибо! Сэкономил некоторое время –

+0

@nIcEcOw: Спасибо, это сработало как шарм. Большое спасибо за ваш ответ :) – John

+0

@John: Ты САМЫЙ ДОБРО ПОЖАЛОВАТЬ И СОХРАНЯТЬ СТИМУ :-) –

3

Как вы имеете дело с непредсказуемой задержкой, используйте SwingWorker, чтобы выполнить загрузку в фоновом режиме, как показано на рисунке here. В примере используется pack(), чтобы изменить размер метки на изображение, но вы можете использовать сетку фиксированного размера и масштабировать изображения, как показано на рисунке here.

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