Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JFC中模拟JDialog运动_Java_Swing_Animation_Jdialog - Fatal编程技术网

Java 如何在JFC中模拟JDialog运动

Java 如何在JFC中模拟JDialog运动,java,swing,animation,jdialog,Java,Swing,Animation,Jdialog,我在屏幕上显示了一个JDialog,我想根据条件模拟它的移动(从一个位置拖动到另一个位置)。有什么方法可以做到这一点吗?请参阅下面的这段代码。我刚刚测试过,效果很好。这只是一个概念的证明 private void startDialog() { final JDialog d = new JDialog(this, "Test", true); d.getContentPane().add(new JLabel("Something")); d.setBounds(100, 100,

我在屏幕上显示了一个
JDialog
,我想根据条件模拟它的移动(从一个位置拖动到另一个位置)。有什么方法可以做到这一点吗?

请参阅下面的这段代码。我刚刚测试过,效果很好。这只是一个概念的证明

private void startDialog() {
  final JDialog d = new JDialog(this, "Test", true);
  d.getContentPane().add(new JLabel("Something"));
  d.setBounds(100, 100, 400, 300);
  Thread t = new Thread(new Runnable() {
    public void run() {
      for (int i = 0; i < 50; i++) {
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            Point p = d.getLocation();
            d.setLocation(p.x + 10, p.y + 10);
          }
        });
        try {
          Thread.sleep(100);
        } catch (InterruptedException e) {
          // ignore
        }
      }
    }
  });
  t.start();
  d.setVisible(true);
}
private void startDialog(){
最终JDialog d=新JDialog(此“测试”,为真);
d、 getContentPane().add(新的JLabel(“某物”);
d、 立根(100100400300);
线程t=新线程(新的可运行线程(){
公开募捐{
对于(int i=0;i<50;i++){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
点p=d.getLocation();
d、 设定位置(p.x+10,p.y+10);
}
});
试一试{
睡眠(100);
}捕捉(中断异常e){
//忽略
}
}
}
});
t、 start();
d、 setVisible(真);
}
您可以自己改进代码:

  • 使用
    计时器
    而不是常规的
    线程
  • 调整睡眠时间和位置跳跃等

只要从任何Swing应用程序调用此方法,它就会工作。

请参阅下面的代码。我刚刚测试过,效果很好。这只是一个概念的证明

private void startDialog() {
  final JDialog d = new JDialog(this, "Test", true);
  d.getContentPane().add(new JLabel("Something"));
  d.setBounds(100, 100, 400, 300);
  Thread t = new Thread(new Runnable() {
    public void run() {
      for (int i = 0; i < 50; i++) {
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            Point p = d.getLocation();
            d.setLocation(p.x + 10, p.y + 10);
          }
        });
        try {
          Thread.sleep(100);
        } catch (InterruptedException e) {
          // ignore
        }
      }
    }
  });
  t.start();
  d.setVisible(true);
}
private void startDialog(){
最终JDialog d=新JDialog(此“测试”,为真);
d、 getContentPane().add(新的JLabel(“某物”);
d、 立根(100100400300);
线程t=新线程(新的可运行线程(){
公开募捐{
对于(int i=0;i<50;i++){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
点p=d.getLocation();
d、 设定位置(p.x+10,p.y+10);
}
});
试一试{
睡眠(100);
}捕捉(中断异常e){
//忽略
}
}
}
});
t、 start();
d、 setVisible(真);
}
您可以自己改进代码:

  • 使用
    计时器
    而不是常规的
    线程
  • 调整睡眠时间和位置跳跃等

只要从任何Swing应用程序调用此方法,它就会工作。

请澄清-
enterDragAndLeave()是什么意思。
?你试过什么?请发布一个小的可编译程序,演示您的问题,一个。事实上,你在上一个问题中被问到了这一点,事实上,我在你的上一个问题中向你展示了一个例子。这需要您付出一些努力,但对您和我们来说都是值得的。我尝试使用setLocation(),但它没有改变位置,JDialog中的所有组件都不可见。使用enterDragAndLeave()我想模拟类似的效果,当用户单击JDialog并将其拖动到特定位置而不显示代码时,我们不知道您做错了什么。同样,我建议您创建并发布一个SSCCE(当然我们不想看到整个程序)。是的,这意味着您需要付出一些努力,但不会超过我为您上一个问题创建SSCCE所付出的努力。1)从GraphicsEnviroment获取屏幕分辨率,2)创建JDialog然后显示,3)在某个时间段启动Swing Timer,4)如果计时器的周期为奇数,则在奇数像素上使用JDialog移动,或在偶数像素上使用JDialog移动:-)5)良好周期为33-50毫秒,6)然后移动到下一个tw0像素的某个位置7)在JDialog接近屏幕边界的情况下一定会发生一些事情8)为了更快地发布日志以获得更好的帮助SSCCE@Dark当前位置您的SSCCE在哪里?如果您不显示代码,我们怎么能猜出什么对您不起作用?请澄清-
enterDragAndLeave()
是什么意思?你试过什么?请发布一个小的可编译程序,演示您的问题,一个。事实上,你在上一个问题中被问到了这一点,事实上,我在你的上一个问题中向你展示了一个例子。这需要您付出一些努力,但对您和我们来说都是值得的。我尝试使用setLocation(),但它没有改变位置,JDialog中的所有组件都不可见。使用enterDragAndLeave()我想模拟类似的效果,当用户单击JDialog并将其拖动到特定位置而不显示代码时,我们不知道您做错了什么。同样,我建议您创建并发布一个SSCCE(当然我们不想看到整个程序)。是的,这意味着您需要付出一些努力,但不会超过我为您上一个问题创建SSCCE所付出的努力。1)从GraphicsEnviroment获取屏幕分辨率,2)创建JDialog然后显示,3)在某个时间段启动Swing Timer,4)如果计时器的周期为奇数,则在奇数像素上使用JDialog移动,或在偶数像素上使用JDialog移动:-)5)良好周期为33-50毫秒,6)然后移动到下一个tw0像素的某个位置7)在JDialog接近屏幕边界的情况下一定会发生一些事情8)为了更快地发布日志以获得更好的帮助SSCCE@Dark当前位置您的SSCCE在哪里?如果你不显示代码,我们怎么能猜出什么不适合你?@Dan:这只会移动JDialog中的面板。JDialog仍然保持它的位置你是在开玩笑还是什么?哪些是移动的面板?我在这里发布之前测试了代码。移动面板包含哪些组件?它们是如何移动的(从左到右…)?你看到移动的是JDialog。这不是别的运动。为了帮你,我开始得票了。我现在就停下来,谢谢。我想我们都很想让提问者解释什么是JDialog以及JDialog中的面板是什么。@Dan:这只会移动JDialog中的面板。JDialog仍然保持它的位置你是在开玩笑还是什么?哪些是移动的面板?我在这里发布之前测试了代码。移动面板包含哪些组件?它们是如何移动的(从左到右…)?你看到的是movi