Я прошу прощения за то, что разместил тему, очень похожую на эту. но все же у меня есть некоторые проблемы. нить можно увидеть здесь
Я применяю 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. но мой код застрял там.
Поэтому я думаю, что должен найти способ заставить в этот момент выполнить всю команду в очереди, но я понятия не имею, как это сделать.
У кого-нибудь была похожая проблема со свингом?