我試過下面的代碼。 Functionality-Java swing Loader圖像顯示不正確?
- 點擊按鈕
- 它將調用,這將需要一些時間來處理的方法。
- 需要顯示加載程序的圖像,以便用戶可以看到處理正在進行。
下面我試過,但如果方法調用之前loaderLabel1.setVisible(true);
亙古不顯示圖像,如果我們評論loaderLabel1.setVisible(false);
話,就說明加載圖像法結束後。
將actionPerformed
方法不應用標籤的可見性,除非它完成?如果是,那麼這個問題是否有其他選擇?
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestLoader extends JPanel{
static ImageIcon loading1 = new ImageIcon("D:\\WORKSPACE\\STUDY\\images\\ajax-loader.gif");
static JLabel loaderLabel1 = new JLabel(loading1, JLabel.CENTER);
public TestLoader(){
super(new GridLayout(0, 1));
System.out.println("---------TEST ------");
JPanel submitPanel = new JPanel();
submitPanel.add(clearMessageButton);
this.add(submitPanel);
JPanel LOADER_PANEL = new JPanel();
loaderLabel1.setVisible(false);
LOADER_PANEL.add(loaderLabel1);
this.add(LOADER_PANEL);
}
JButton clearMessageButton = new JButton(new AbstractAction("Test Result") {
@Override
public void actionPerformed(ActionEvent arg0) {
loaderLabel1.setVisible(true);
TestMethod();
loaderLabel1.setVisible(false);
}});
public void TestMethod(){
System.out.println(" =========START TestMethod =========");
try {
Thread.currentThread().sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" =========complete TestMethod =========");
}
/**
* @param args
*/
public static void main(final String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
TestLoader pf = new TestLoader();
pf.display();
}
});
}
private void display() {
JFrame frame = new JFrame("TEST LOADER");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
frame.pack();
frame.setResizable(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
線程問題:請勿對事件派發線程執行處理。 'setVisible(true)'調用在事件隊列中放置一個事件,並在'actionPerformed()'方法返回後執行...... –
@UsagiMiyamoto:謝謝你提供的信息。使用SwingWorker終於解決了我的問題。 –