Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 强制JFrame在SetResizeable之后不调整大小(false)。命令行不通_Java_Swing_Resize_Jframe - Fatal编程技术网

Java 强制JFrame在SetResizeable之后不调整大小(false)。命令行不通

Java 强制JFrame在SetResizeable之后不调整大小(false)。命令行不通,java,swing,resize,jframe,Java,Swing,Resize,Jframe,我有一个简单的Atari breakout程序,长话短说,我的一个功能是允许用户调整窗口大小几秒钟,然后再次使窗口不可调整大小。一切正常,窗口从不可调整大小变为可调整大小几秒钟。应该发生的是,在几秒钟之后,窗口应该停止接受用于调整窗口大小的输入(即:不应该调整大小)。唯一的问题是,每当它被设置为不可调整大小时,如果您在窗口上拖动光标来调整大小,它就会不断调整大小。它只会在您放开窗口后激活窗口的不可调整大小状态。我的问题是,一旦定时器启动,我如何在你放开窗口,取消你对调整大小的控制之前实现这一点

我有一个简单的Atari breakout程序,长话短说,我的一个功能是允许用户调整窗口大小几秒钟,然后再次使窗口不可调整大小。一切正常,窗口从不可调整大小变为可调整大小几秒钟。应该发生的是,在几秒钟之后,窗口应该停止接受用于调整窗口大小的输入(即:不应该调整大小)。唯一的问题是,每当它被设置为不可调整大小时,如果您在窗口上拖动光标来调整大小,它就会不断调整大小。它只会在您放开窗口后激活窗口的不可调整大小状态。我的问题是,一旦定时器启动,我如何在你放开窗口,取消你对调整大小的控制之前实现这一点

附言:我想编写一个程序,在命令被调用后,立即阻止你调整窗口的大小,而不是等待你放开鼠标。有什么建议吗

下面是一个简化的例子:(给你6秒钟的时间来调整窗口大小并玩它)

封装测试;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JFrame;
导入javax.swing.Timer;
公开课考试{
公共静态void main(字符串[]args){
JFrame testFrame=新JFrame();
testFrame.setresizeable(true);
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
long-endingTime=System.currentTimeMillis()+6000;
Timer testTimer=新计时器(100,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
如果((endingTime-System.currentTimeMillis())<0){
testFrame.setresizeable(false);
}
}
});
testFrame.setVisible(true);
testTimer.start();
}
}

您是否尝试过在通电结束后立即重新验证JFrame?这很可能会解决您的问题(尽管我不知道,因为您既没有SSCCE,也没有MVCE)。我希望这会有所帮助,祝你好运。

我能想到的一种方法是,如果帧无法调整大小,在调整大小事件后将大小设置回原来的大小

不过,我不确定它能起到多大的作用

frame.addComponentListener(new ComponentAdapter() {
    @Override
    public void componentResized(ComponentEvent e) {
        if (!frame.isResizable()) {
            frame.setSize(...);
        }
    }
});

使用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();
}

打得好,@Bubletan!这在Quicksilver002上运行得非常好!就强行控制鼠标而言,这似乎有点低效,而不是让程序简单地限制您调整鼠标大小,但到目前为止,这似乎是唯一可能的方法。不管怎样,它肯定是有效的。非常感谢你!
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();
}