我已经检查了WindowListener接口的方法,但它没有这个事件,或者用于调整窗口大小。 (实际上有一个从Component类继承的resized事件:(link)但是那就是全部..如果用户触发全屏或离开它,有人可以告诉我如何做某事吗?
//全屏我的意思是最大化:))
答案 0 :(得分:2)
如果通过“触发全屏”指的是最大化窗口,则不应使用ComponentListener。你想要的是WindowStateListener:
private static boolean isMaximized(int state) {
return (state & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH;
}
// ...
frame.addWindowStateListener(new WindowStateListener() {
public void windowStateChanged(WindowEvent event) {
boolean isMaximized = isMaximized(event.getNewState());
boolean wasMaximized = isMaximized(event.getOldState());
if (isMaximized && !wasMaximized) {
System.out.println("User maximized window.");
} else if (wasMaximized && !isMaximized) {
System.out.println("User unmaximized window.");
}
}
});
如果通过“触发全屏”表示真正的full-screen window,则ComponentListener可能有效,但我还没有尝试过。由于只有在您的代码调用GraphicsDevice.setFullScreenWindow
时才会出现真正的全屏窗口,您可能希望在调用之后立即添加代码:
if (userPressedFullScreenButton) {
frame.getGraphicsConfiguration().getDevice().setFullScreenWindow(frame);
System.out.println("User switched to full-screen.");
} else if (userPressedManagedWindowButton) {
frame.getGraphicsConfiguration().getDevice().setFullScreenWindow(null);
System.out.println("User switched out of full-screen.");
}
答案 1 :(得分:0)
您可以添加新ComponentListener
来检测屏幕是否已调整大小,然后如果新尺寸等于您的屏幕分辨率大小,则可以匹配。
示例强>
JFrame frame = new JFrame();
frame.addComponentListener(new ComponentListener() {
@Override
public void componentHidden(ComponentEvent arg0) {}
@Override
public void componentMoved(ComponentEvent arg0) {}
@Override
public void componentResized(ComponentEvent e) {
Component c = e.getComponent();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();
if (width == c.getWidth() - 16 && height == c.getHeight() - 16)
System.out.println("User entered fullscreen");
}
@Override
public void componentShown(ComponentEvent arg0) {}
});
<强>解释强>
每次用户调整帧大小时,都会调用 ComponenetListener#componentResized
。根据您的问题,您想要检测用户是否已进入全屏。
因此,在componentResized
方法中,我会检查窗口的新宽度和高度是否等于用户的屏幕分辨率。我不得不将新的宽度和高度减去16,因为它们是窗口边框的偏移量。但是,如果您使用未修饰的窗口,那么您不应该减去我认为。
希望它有所帮助。