2014-10-27 30 views
0

自动移动窗口和我的节目一个小问题:我想在时间 自动移动窗口我有一个代码:Java的如何在JFrame中

package simpleFrame; 
import java.awt.*; 
import java.util.TimerTask; 
import javax.swing.*; 

public class Trololo 
{ 
    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      {  

       JFrame frame = new SizedFrame(); 
       frame.setUndecorated(false); 
       frame.setTitle("SizedFrame"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setVisible(true); 
        System.out.println("About to schedule task."); 
    new ReminderBeep(5); 
    System.out.println("Task scheduled."); 

      } 


     }); 
    } 
} 

class SizedFrame extends JFrame 
{ 
    public SizedFrame() 
    { 
     Toolkit kit = Toolkit.getDefaultToolkit(); 
     Dimension screenSize = kit.getScreenSize(); 
     int screenHeight = screenSize.height; 
     int screenWidth = screenSize.width; 
     setSize(screenWidth/2, screenHeight/2); 
     setBounds(500,500,screenWidth/2,screenHeight/2); 
    } 

} 



class ReminderBeep { 
    Toolkit toolkit; 
    java.util.Timer timer; 


    public ReminderBeep(int seconds) { 
    toolkit = Toolkit.getDefaultToolkit(); 
    timer = new java.util.Timer(); 
    timer.schedule(new RemindTask(), seconds * 1000); 
    } 


    class RemindTask extends TimerTask { 
     SizedFrame window = new SizedFrame(); 
    public void run() { 
     window.setBounds(900,900,500,600); 
     toolkit.beep(); 
     System.out.println("ok"); 

    } 
    }} 

我有工作的计时器:它在命令提示符中显示“ok”,但窗口不移动:/如何获取作品?

+1

使用'javax.swing.Timer'处理摇摆任务如移动框架。另外,当你调整边界时,你的层次被失效。从['invalidate()'](http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#invalidate())的文档:*此方法在任何与布局相关的信息更改(例如,设置组件边界或将组件添加到容器)*。您必须在设置组件边界后重新验证()。 – 2014-10-27 17:01:23

回答

1

在main()方法中,创建一个SizedFrame并显示它。然后你开始一个计时器。

当计时器激发时,您将创建另一个SizedFrame,但不显示它。然后在非显示的SizedFrame上设置边界。您没有调整您显示的SizedFrame的大小。

+0

非常感谢! :D只有一点问题:如何关闭旧的jframe? – Zielpak 2014-10-27 17:16:33

+0

大概通过调用setVisible(false)方法。 – 2014-10-27 17:22:15

+1

为什么不移动/调整现有JFrame的大小? – keuleJ 2014-10-27 17:33:38

0

你必须通过刷新TEM ^后期,拉丝回重生表单(施惠国/帧)(重新验证),并这样它那会移动