我已经查看了WindowListener接口的方法,但它没有相应的事件来处理窗口大小调整。实际上,在Component类中有一个继承自的resized事件:(链接),但是这仅仅是全部内容...有没有人能告诉我如果用户触发全屏或离开全屏时如何处理?//通过全屏我指最大化:))
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.");
}
}
});
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.");
}
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,因为这是窗口边框的偏移量。但是,如果您使用的是无边框窗口,则不应该进行减法操作。
希望能对您有所帮助。