2

如何知道它paintComponent(Graphics g)已经完成了它的工作?

我可以:

 @Override
 public void paintComponent(Graphics g) {
    try {
         //Paint some stuff
    } finally {
         //Do something after painting
    }
 }

还有其他方法吗?

4

2 回答 2

5

你的问题是:

如何知道paintComponent(Graphics g) 已经完成了它的工作?

然后您在对该问题的评论中声明:

我创建了按钮(简单的 JComponent),它必须首先淡出,然后执行 actionlistener.actionPerformed(someEvent)

正如我所怀疑的那样,您似乎在 paintComponent 内部做错了什么,因为淡出背后的驱动程序应该在此方法内部。方法要快,要快,要在比喻的“眨眼”中完成,不能有任何延迟或褪色。相反,您可能会使用 Swing Timer 更改按钮用于其透明度的类字段,在每次更改状态后调用 repaint,然后当Timer完成时,您调用代码执行您想要的任何操作。

如需更具体的帮助,请考虑创建和发布sscce

于 2013-09-05T13:08:05.567 回答
1

我喜欢SwingWorker 文档中的这个例子:

   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();

这个稍加修改的简单示例对我的情况非常有帮助。PS有人知道上述findTheMeaningOfLife();方法的源代码吗?.. :))

于 2013-09-05T14:36:31.793 回答