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