我試圖使用Graphics2D繪製一個JPanel,並且我想在SwingWorker的done()
方法中繪製圖形,在doInBackGround()
中執行一些數學運算後,但這似乎並沒有繪製任何東西?嘗試從SwingWorker done()方法中繪製JPanel什麼也不做
我的代碼有什麼問題?
class MyJanel extends JPanel {
@Override
public Dimension getPreferredSize() {
return new Dimension(800, 600);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
MyExecutor worker = new MyExecutor(g2);
worker.execute();
}
class MyExecutor extends SwingWorker<Void,Void> {
Graphics2D gRef;
int result;
public MyExecutor(Graphics2D g2){
gRef = g2;
}
@Override
protected Void doInBackground() {
result = 100+100;
return null;
}
@Override
protected void done() {
gRef.drawLine(20, 20, result, result);
}
}
}
永遠不要保留對Graphics對象的引用(除非你自己創建Graphics)。如果你想觸發'paintComponent()',調用'repaint()'。此外,不要將有狀態代碼放在'paintComponent()'中,因爲你無法確定它將被調用的時間和次數。 – 2015-03-30 20:11:19
'不要保留對Graphics對象的引用(除非你自己創建圖形)'Source please?謝謝 – 2015-04-01 04:34:52
我沒有任何資料來源,只是經驗告訴我,當你這樣做時,你總會遇到問題。當你想到它時,這是非常合乎邏輯的。 – 2015-04-01 11:58:36