Обновить JPanel - PullRequest
       22

Обновить JPanel

4 голосов
/ 22 марта 2009

Мне нужно отобразить разные рисунки на 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 ]

2 голосов
/ 22 марта 2009

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

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

2 голосов
/ 22 марта 2009

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

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

...