2009-03-22 2 views
4

Мне нужно отобразить разные рисунки на JPanel. Я поместил файлы чертежа в массив, но когда я изменил его с помощью кнопки, JPanel отображает только первый чертеж и не переходит к следующему чертежу ...Обновить JPanel

Я вызвал panel.revalidate() , но это не работает.

Это сегмент кода, который я использовал, но не работал. Дисплей JPanel был статическим.

String[] a = {"image1.txt","image2.txt","image3.txt"}; 
    List<String> files = Arrays.asList(a); 


    public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == answer1){ 
     fileNumber++; 
     //call other class for painting (files=array files, fileNumber=index of the array) 
     draw = new drawingPanel(files,fileNumber); 
     panel.add(draw); 
    } 
    panel.revalidate(); 
    panel.repaint(); 
} 

ответ

2

Возможно, вы попытаетесь сохранить ссылку на свою чертежную панель и позвонить remove() на существующей чертежной панели, прежде чем повторно добавить ее. Согласно JavaDoc, макет FlowLayout по умолчанию - который не заменит изображение, как вы намереваетесь, но вместо этого разместите следующую чертежную панель справа от предыдущей. (что происходит при изменении размера окна?)

Кстати, как вы обрабатываете случай, когда вы проходите последнее изображение в массиве?

+0

Дорогой Майк ... Спасибо миллион за предложение кода remove(). Теперь JPanel отображает разные рисунки каждый раз, когда я нажимаю кнопку. Ой!! Я не мог поверить, что это просто одно слово ..remove(), и это стоит мне слезы и бессонную ночь в течение стольких дней! – Jessy

+0

О, я пропустил, чтобы ответить на ваш вопрос. Когда я передаю последнее изображение, я добавляю код system.exit, чтобы закрыть его. – Jessy

2

Вы показываете только один рисунок за раз? Если это так, вы можете попробовать использовать CardLayout, чтобы вы могли легко переключаться между рисунками. См. Пример http://java.sun.com/docs/books/tutorial/uiswing/layout/card.html.

У меня была аналогичная проблема, которая на днях пыталась динамически отображать различные кнопки в моем пользовательском интерфейсе, в зависимости от того, какую вкладку выбрана пользователем JTabbedPane. CardLayout - это просто то, что нужно сделать.

+0

Да, один рисунок за раз. Моя программа очень похожа на пример, который предлагает предложить. Как бы я все еще не мог изменить рисунок ... это меня так запутывает. Позвольте мне показать сегрегацию кода в ответе. – Jessy

+0

Код похож на мои неудачные попытки. Используйте CardLayout на панели; каждый экземпляр drawingPanel представляет собой новую карту. См. Http://grocerylister.cvs.sourceforge.net/viewvc/grocerylister/grocerylister/src/grocerylister/ui/MainFrame.java?revision=1.91.4.75&view=markup&pathrev=release_0_2_0_dev например – ssakl

+0

SO ограничивает комментарии до 300 символов, поэтому Я продолжу здесь. Найдите связанный код для «cardPanel», чтобы увидеть, что я там делаю. Надеюсь, вы сможете адаптировать его для своих (немного более сложных) потребностей. – ssakl

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