当我的swing应用程序运行时,我更改了屏幕的大小(例如从1024x768到800x600)。
有什么事情我可以听取通知吗?
或者我可以在几秒钟内检查屏幕尺寸,但Toolkit.getScreenSize()会一直告诉我旧值。
如何在更改后获得真实的屏幕尺寸?
环境:Linux(在SuSE ES 11和Ubuntu 9.04上测试)
感谢您的帮助 马顿
答案 0 :(得分:2)
以下对我有用,但我在Mac上,所以我不能肯定它会在Linux上运行:
System.out.println(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth() + "x" + GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight());
//Ignore this block, it was simply to give me a chance to change my resolution
Scanner readUserInput=new Scanner(System.in);
System.out.println("Waiting on input, go change your resolution");
String myName=readUserInput.nextLine();
System.out.println(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth() + "x" + GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight());
输出(实际上是输入)如下:
1440x900
Waiting on input, go change your resolution
blah
1280x960
显然,如果你有多个屏幕设备,你将不得不更加谨慎。
答案 1 :(得分:1)
要计算显示尺寸,您可以使用(取自GraphicsConfiguration javadoc)
Rectangle virtualBounds = new Rectangle();
GraphicsEnvironment ge = GraphicsEnvironment.
getLocalGraphicsEnvironment();
GraphicsDevice[] gs =
ge.getScreenDevices();
for (int j = 0; j < gs.length; j++) {
GraphicsDevice gd = gs[j];
GraphicsConfiguration[] gc =
gd.getConfigurations();
for (int i=0; i < gc.length; i++) {
virtualBounds =
virtualBounds.union(gc[i].getBounds());
}
}
然后,您可以查询width
的{{1}}和height
。
这也适用于多显示器设置。
据我所知,没有JDK支持的方法来检测更改,因此轮询是您唯一的选择,或使用JNA和本机代码。如果您的顶级窗口最大化,那么调整显示大小也会调整任何最大化窗口的大小,因此您也可以在那里监听更改。有关编写组件侦听器的示例,请参阅此sun tutorial。
如果您没有顶级最大化窗口,那么您也可以通过创建隐藏的最大化窗口来实现相同的效果。我不能确定这是否有效,但值得尝试。
答案 2 :(得分:-1)
Dimension screenSize = Toolkit.getDefaultToolkit()。getScreenSize();
f.setSize(screenSize.width,screenSize.height);