0

我创建了一个JDialog我想移动和调整大小的。JDialog我的程序在屏幕上绘制。当用户点击它时,它应该拉伸到屏幕的宽度,然后增加高度。我试过这样。

for(int i = 150; i <= width; i += 3) {
    dialog.setSize(i, 80);

    try {
        Thread.sleep(0, 1);
    } catch(Exception e2) {}
}

for(int i = 80; i <= 200; i++) {
    dialog.setSize(width, i);

    try {
        Thread.sleep(1);
    } catch(Exception e3) {}
}

执行代码时,需要一段时间,然后 JDialog 将立即显示为拉伸状态。没有显示展开。

好吧,当用户再次单击对话框时,它将反转打开动画并关闭。

for(int i = 200; i >= 80; i--) {
    newMsg.setSize(width, i);

    try {
        Thread.sleep(0, 1);
    } catch(Exception e4) {}
}   

for(int i = 0; i >= -width; i -= 3) {
    newMsg.setLocation(i, 100);

    try {
        Thread.sleep(0, 1);
    } catch(Exception e5) {}
}

这个工作正常。可以看到运动。据我了解,这些代码在其他方面是相同的,只是它们被颠倒了。为什么开场没有按预期工作,但收场却可以?

4

1 回答 1

4

不要Thread.sleepEDT. 这会导致 UI “冻结”。您可以在此处使用Swing Timer 。以下是初始“扩展”的处理方式:

Timer timer = new Timer(0, new ActionListener() {

   @Override
   public void actionPerformed(ActionEvent e) {
    updateDialogSize();
   }
});

timer.setDelay(5); // short delay
timer.start();

更新对话框:

void updateDialogSize() {
   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
   if (dialog.getWidth() < screenSize.getWidth()) { // 1st size width
      dialog.setSize(dialog.getWidth() + 5, dialog.getHeight());
   } else if (dialog.getHeight() < screenSize.getHeight()) { // then size height
     dialog.setSize(dialog.getWidth(), dialog.getHeight() + 5);
   } else {
      timer.stop(); // work done
   }

     dialog.setLocationRelativeTo(myFrame);
}

我将把对话框“收缩”作为练习;)

于 2012-12-30T17:50:37.260 回答