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

时间:2013-09-05 12:29:19

标签: java swing graphics paintcomponent

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

我能做到:

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

还有其他办法吗?

2 个答案:

答案 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();方法的源代码吗?..:))