我有一个简单的Atari突破程序,长话短说,我的一个功能是允许用户调整窗口大小几秒钟,然后再次使窗口不可调整大小。一切正常,窗口从不可调整大小到可调整大小几秒钟。应该发生的是,在几秒钟之后,窗口应该停止接受用于调整窗口大小的输入(IE:不应该可调整大小)。唯一的问题是,无论何时将其设置为不可调整大小,如果您将光标拖动到窗口上以调整其大小,它将继续调整大小。它只会在您放开窗口后激活窗口的不可调整大小的状态。我的问题是,在你放开窗户之前我该如何实现这一点,一旦定时器启动就取消你对调整大小的控制?
P.S:我想编程,一旦命令被调用就立即阻止你调整窗口的大小,而不是等你放开鼠标。有什么建议吗?
这是一个简化的案例:(你有6秒的时间调整窗口大小并玩它)
package test;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;
public class Test {
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();
}
}
答案 0 :(得分:2)
我能想到的一种方法是在调整大小事件后设置尺寸,如果框架不可调整大小。
不确定它的效果如何。
frame.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
if (!frame.isResizable()) {
frame.setSize(...);
}
}
});
答案 1 :(得分:0)
您是否尝试在开机结束后立即重新验证JFrame?这很可能会解决你的问题(虽然我不知道你既没有SSCCE,也没有MVCE)。我希望这会有所帮助,祝你好运。
答案 2 :(得分:0)
使用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();
}