如何知道paintComponent(Graphics g)
已完成它的工作?
我能做到:
@Override
public void paintComponent(Graphics g) {
try {
//Paint some stuff
} finally {
//Do something after painting
}
}
还有其他办法吗?
答案 0 :(得分:5)
你的问题是:
如何知道paintComponent(Graphics g)已完成它的工作?
然后你在对这个问题的评论中说:
我创建了按钮(简单的JComponent),它必须先淡出,然后执行actionlistener.actionPerformed(someEvent)
正如我所怀疑的那样,你似乎在paintComponent中做错了,因为淡出后面的驱动程序应该不在这个方法中。这种方法应该快速,因为所有人都会离开,它应该在比喻“眨眼间”完成,并且不应该在其内部有任何延迟或褪色。相反,您可能会使用Swing Timer更改按钮用于透明度的类字段,在每次状态更改后调用重绘,然后在 Timer 完成后调用代码执行无论你想要什么行动。
有关更具体的帮助,请考虑创建和发布sscce。
答案 1 :(得分:1)
我喜欢SwingWorker documentation中的这个例子:
final JLabel label;
class MeaningOfLifeFinder extends SwingWorker<String, Object> {
@Override
public String doInBackground() {
return findTheMeaningOfLife();
}
@Override
protected void done() {
try {
label.setText(get());
} catch (Exception ignore) {
}
}
}
(new MeaningOfLifeFinder()).execute();
这个简单的例子稍加修改可能对我的情况非常有帮助。
附:有人知道上面findTheMeaningOfLife();
方法的源代码吗?..:))