【问题标题】:How to know that paintComponent(Graphics g) has finished it's job (Java)?如何知道paintComponent(Graphics g) 已经完成了它的工作(Java)?
【发布时间】:2013-09-05 12:29:19
【问题描述】:

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

我能做到:

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

还有其他方法吗?

【问题讨论】:

  • 这对我来说似乎是一个奇怪的要求,让我问:你画完之后想做什么?希望没有程序逻辑会进入该方法,但我担心您实际上已经这样做了。为什么要显示paint(...) 而谈论paintComponent(...) 方法?
  • 您可以覆盖paintComponent() 并调用super.paintComponent(),之后该调用显然已完成,但我也很好奇您要做什么。看起来很可疑,就像您将绘图与完全不相关的东西混合在一起。
  • 感谢您的编辑(虽然应该保护paintComponent),但仍然请说明您的请求背后的理由。
  • 我创建了按钮(简单的JComponent),它必须先淡出(鼠标松开后改变颜色),然后执行actionlistener.actionPerformed(someEvent)。如果我在按钮完全重绘之前执行repaint(); actionlistener.actionPerformed(someEvent); 操作。

标签: java swing graphics paintcomponent


【解决方案1】:

你的问题是:

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

然后您在对该问题的评论中陈述:

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

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

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

【讨论】:

  • 谁对此投了赞成票,谢谢!你把我推到了 100k 大关!
  • 哈!现在你欠我的:-P 恭喜!
  • ............主要问题是,如果我将弹出窗口设置为可见,几毫秒我可以看到黄色,然后它被重新绘制为灰色。所以我必须... == 从ActionListener/better Swing Action to SwingWorker 重定向任何内容,最好是Runnable#Thread,那么ActionPerformed 中的代码不会延迟重绘的任何鬼影
  • 恭喜皮特@100k :)
  • @HovercraftFullOfEels : 祝贺你达到了世纪标记 :-)
【解决方案2】:

我喜欢这个来自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(); 方法的源代码吗?.. :))

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-01-29
  • 2012-02-29
  • 2013-11-18
  • 2016-09-28
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多