5

在显示模态JDialog之前绘制简单动画的最佳方法是什么?(即从鼠标单击点扩展边框到对话框位置)。我认为可以setVisible在对话框的方法上绘制父框架的玻璃窗格。

但是,由于 JDialog 对父级是模态的,因此在 JDialog 变得可见之前,我找不到将绘图事件泵入EDT的方法,因为 EDT 上的当前事件尚未完成。

4

4 回答 4

1

您是否试图独立显示动画的 JDialog?为了正确设置订单,您可能需要将这些操作捆绑在一个可运行文件中,该可运行文件立即传递给 EDT。

例如:

SwingUtilities.invokeLater(new Runnable(){
   public void run(){
      doAnnimation();
      showDialog();
   }
}

最好将 JDialog 子类化,这样您就可以在调用超类实现之前将 doAnnimation() 逻辑添加到 setVisible(..) 或 show() 方法。

最后,我想你需要手动设置 dalog 的尺寸——我不记得 Java 是否会在显示对话框之前知道对话框的实际大小,所以如果你可能会得到一些无用的动画信息在显示之前查询大小。

于 2008-09-02T15:58:56.280 回答
1

也许你看看 JSE 6 中包含的 SwingWorker 项目。(链接到 SwingWorker)在我正在阅读的“肮脏的富客户端”一书中,他们经常使用这个工具。也许您可以在书籍网站上的示例中找到提示:http: //filthyrichclients.org/

于 2008-09-18T13:40:05.523 回答
0

一种可能性是在 Glass Pane 上绘制您自己的对话框。然后你就可以完全控制对话框并且可以绘制任何你想要的东西。 这是在 Glass Pane上创建动画的教程。

于 2010-09-07T20:20:00.327 回答
0

您也许可以采用@rcreswick 的答案并对其进行一些扩展以使其发挥作用。

void myShowDialog() {
  new Thread(new Runnable() {public void run() {
    SwingUtilities.invokeAndWait(new Runnable() { public void run() {
      doAnimation();
    } } );
    // Delay to wait for the animation to finish (if needed)
    Thread.sleep(500);
    SwingUtilities.invokeAndWait(new Runnable() { public void run() {
      showDialog();
    } } );
  } } ).start();
}

它非常难看,必须代替基本的 showDialog() 调用来调用,但它应该可以工作。

于 2008-09-04T01:00:11.167 回答