使用双屏时在主显示器上居中显示 JFrame
Posted
技术标签:
【中文标题】使用双屏时在主显示器上居中显示 JFrame【英文标题】:Display JFrame Centred on main monitor when using dual screens 【发布时间】:2012-05-28 07:09:47 【问题描述】:我正在尝试编写一些代码,以使用 Java 将我的主应用程序 JFrame 置于计算机屏幕的中心。为此,我使用下面的代码,将过程分为两部分,这只是因为我在类的其他地方使用 ScreenHeight 和 ScreenWidth 进行缩放,它们是类的属性。
此代码在我的笔记本电脑和其他单屏机器上完美运行,但在我的双显示器主机上,它将屏幕放置在工作区的中心,其中放置了一半的对话框(可能很小)在每个屏幕上。它在一个方法中,所以每次对话框大小由程序更改时我都可以调用它。
我使用布尔宽度值将屏幕保持在垂直轴上的相同位置,但将其置于水平轴上。
// Finds the size of the screen
private void find_ScreenSize()
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension dim = toolkit.getScreenSize();
ScreenHeight = dim.height;
ScreenWidth = dim.width;
// Centres the dialogue box within the screen
private void centre_Frame(JFrame Frame, boolean Width)
find_ScreenSize();
if (!Width) // if you are not justifying on the X axis
Frame.setLocation(Frame.getLocationOnScreen().x,
((ScreenWidth / 2) - (Frame.getWidth() / 2)));
else
Frame.setLocation(((ScreenWidth / 2) - (Frame.getWidth() / 2)),
((ScreenHeight / 2) - (Frame.getHeight() / 2)));
我希望能够在任何多屏幕计算机上将对话框置于主屏幕/第一个屏幕的中心。我的应用程序中的对话框,我不控制其位置,设法做我想做的事情,例如我的 JOptionPane 和文件打开和保存对话都可以正常工作。
我在 Linux 上进行开发,但该应用程序适用于 Linux 和 MS 平台。
搜索这个问题给了我很多上面的例子,但没有告诉我如何做我想做的事,任何帮助将不胜感激。
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:frame.setLocationRelativeTo(null);
应该可以工作 (doc)。至少在我的多显示器设置中是这样。请注意,窗口始终显示在主监视器的中心,即使应用程序是从辅助监视器启动的。
您可以使用GraphicsEnvironment.getCenterPoint 来查找中心点,而不是自己计算。
如果您想在特定显示器中显示,请参阅Show JFrame in a specific screen in dual monitor configuration
【讨论】:
感谢您提供的信息,我使用了运行良好的 frame.setLocationRelativeTo(null)。稍后我可能会考虑使用您建议的其他元素将其置于特定屏幕上。以上是关于使用双屏时在主显示器上居中显示 JFrame的主要内容,如果未能解决你的问题,请参考以下文章
java中Frame("测试窗口")创建窗口,运行后标题栏显示为居中,应当如何修改该Frame对象标题栏的对齐方式。