代码之家  ›  专栏  ›  技术社区  ›  hakan

在jdialog显示时绘制动画

  •  5
  • hakan  · 技术社区  · 18 年前

    在显示模态之前绘制简单动画的最佳方法是什么? JDialog ?(即从鼠标单击点到对话框位置展开边框)。我想可以在 setVisible 对话框的方法。

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

    4 回复  |  直到 8 年前
        1
  •  1
  •   rcreswick    18 年前

    你是不是想让Jdialog单独看到周年纪念?为了正确地设置顺序,您可能需要将这些操作捆绑到一个可运行的包中,该包将立即传递给edt。

    如:

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

    在调用超类实现之前,可以将JBALLUT子类分类,这样您就可以将DOANNIMION()逻辑添加到SETABLE(..)或SUW()方法中。

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

        2
  •  1
  •   Roland Schneider    18 年前

    也许您可以看看jse 6中包含的swingworker项目。 (Link to SwingWorker) 在我正在读的《肮脏的富客户》一书中,他们经常使用这个工具。也许你可以在图书网站的例子中找到一个提示: http://filthyrichclients.org/

        3
  •  0
  •   John Meagher    18 年前

    你也许可以接受@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()调用,但它应该可以工作。

        4
  •  0
  •   Jay Askren    16 年前

    一种可能是在玻璃面板上绘制自己的对话框。然后你可以完全控制对话,可以画任何你想要的东西。 Here's a tutorial on creating animations 在玻璃窗上。