Обновление рисунка на чертежеПанель расширяет JPanel 2 - PullRequest
0 голосов
/ 05 августа 2011

Я прошу прощения за то, что разместил тему, очень похожую на эту. но все же у меня есть некоторые проблемы. нить можно увидеть здесь

Я применяю backfround к jpanel. мне нужно иметь загрузочный gifthat изменения позже для изображения ОК или ошибки.

Я загружаю в начале прозрачную картинку. он заменяется, как только слушатель действия начинает загружаться, и в конце кода, выполняемого в слушателе, я меняю рисунок с помощью ok / error. Прозрачный, хорошо и ошибочный загружаются отлично, но мне не удалось увидеть загрузочный.

вот мой код слушателя:

void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {

        // load loading icon
        Image img = new ImageIcon(iconPath+"loading.gif").getImage();
        this.iconPanel.replaceImage(img);

        this.iconPanel.updateUI();
        this.iconPanel.revalidate();
        this.iconPanel.repaint();

        // clear table contents
        designValue.clear();
        deployValue.clear();

        // Fill class
        diagnosticGenerator diagnostic = new diagnosticGenerator();
        Vector<Integer> indexes;

        // if modeCombo.getSelectedIndex() == 0 i show only data regarding the current user
        if (modeCombo.getSelectedIndex() == 0) {
            // receive Design Table
            designValue.addAll(diagnostic.getDesignContents());

            // receive Deploy Table
            deployValue.addAll(diagnostic.getDeployContents());

            // receive indexes of out-dated deploy
            indexes = new Vector<Integer>(diagnostic.getOutdatedDeployIndexes());
        }
        // otherwise i show data of all the users
        else {
            // receive Design Table
            designValue.addAll(diagnostic.getDesignContents_allUsers());

            // receive Deploy Table
            deployValue.addAll(diagnostic.getDeployContents_allUsers());

            // receive indexes of out-dated deploy
            indexes = new Vector<Integer>(diagnostic.getOutdatedDeployIndexes_allUsers());

        }

        // set default color to green
        deployTable.resetColor(Color.white);
        // set red background to the
        for (Integer x : indexes) 
            deployTable.setRowColor(x, Color.red);

        deployTable.repaint();
        designTable.revalidate();
        deployTable.revalidate();

        //update refreshLabel with the new date
        Date date = new Date();
        refreshLabel.setText(date.toString());

        //replace icon with different mark depending on the fact if we found an error or not
        if(indexes.isEmpty())
            img = new ImageIcon(iconPath+"ok.png").getImage();
        else
            img = new ImageIcon(iconPath+"error.png").getImage();
        this.iconPanel.replaceImage(img);
        this.iconPanel.repaint();
    }

Я думаю, что это вопрос асинхронных сообщений, потому что если я вызову ожидание сразу после

this.iconPanel.repaint();

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

У кого-нибудь была похожая проблема со свингом?

1 Ответ

1 голос
/ 05 августа 2011

Используйте метод блокировки, например ImageIO.read(File/URL/InputStream), чтобы получить Image.ImageIO был введен в J2SE 'недавно'.

...