在setResizable(false)不起作用后强制JFrame不调整大小

时间:2015-03-29 04:33:22

标签: java swing resize

我在使用它时遇到了一些麻烦。我已经创建了一个游戏,其中我有一个启动,让窗口可以调整大小几秒钟。一切正常,窗口从不可调整大小变为可调整大小几秒钟。应该发生的是,在几秒钟之后,窗口应该停止接受用于调整窗口大小的输入(IE:不应该可调整大小)。唯一的问题是,无论何时将其设置为不可调整大小,如果您将光标拖动到窗口上以调整其大小,它将继续调整大小。它只会在您放开窗口后激活窗口的不可调整大小的状态。我的问题是,在你放开窗户之前我该如何实现这一点,一旦定时器启动就取消你对调整大小的控制?

这是一个简化的案例:(你有6秒的时间调整窗口大小并玩它)

package test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;


public class Test {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {        
        JFrame testFrame = new JFrame();
        testFrame.setResizable(true);
        testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        long endingTime = System.currentTimeMillis() + 6000;
        Timer testTimer = new Timer(100, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if((endingTime - System.currentTimeMillis()) < 0){
                    testFrame.setResizable(false);
                }
            }

        });
        testFrame.setVisible(true);
        testTimer.start();
    }

}

1 个答案:

答案 0 :(得分:1)

使用Java的Robot类强制释放鼠标。我已经修改了下面的示例代码:

public static void main(String[] args) {        
    JFrame testFrame = new JFrame();
    testFrame.setResizable(true);
    testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Timer testTimer = new Timer(6000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
                testFrame.setResizable(false);
          Robot r;
          try {
            r = new Robot();
            r.mouseRelease( InputEvent.BUTTON1_DOWN_MASK);
          } catch (AWTException ex) {
            ex.printStackTrace();
          }
        }

    });
    testFrame.setVisible(true);
    testTimer.start();
}