Java: JFrame.setLocationRelativeTo(null) 在 Ubuntu 10.04 / gnome 2.30.2 上不居中窗口,OpenJDK 1.6.0_18

2022-09-05 00:30:32

示例代码:

    JFrame jFrame = new JFrame("Test");
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jFrame.setLocationRelativeTo(null);
    jFrame.setSize(600, 600);
    jFrame.pack();
    // jFrame.setLocationRelativeTo(null); // same results
    jFrame.setVisible(true);

screenshot

这是OpenJDK的错吗?我记得听说它不如Sun的好,但是由于它成为Ubuntu的标准,或者我决定使用它。该程序可能会在Windows上运行,所以我想我将不得不检查那里...任何简单的方法都可以以独立于平台的方式解决此问题,而不会在已经起作用的地方破坏它?


答案 1
JFrame jFrame = new JFrame("Test");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//jFrame.setLocationRelativeTo(null);
jFrame.setSize(600, 600);
jFrame.pack();
jFrame.setVisible(true);
jFrame.setLocationRelativeTo(null); //To center the code

这将纠正问题并将Jframe居中


答案 2

一种方法是手动定位窗口。在调用 后立即放置以下代码。pack()

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Point middle = new Point(screenSize.width / 2, screenSize.height / 2);
Point newLocation = new Point(middle.x - (jFrame.getWidth() / 2), 
                              middle.y - (jFrame.getHeight() / 2));
jFrame.setLocation(newLocation);

免责声明,这仅在Windows上进行了测试。

此外,应始终使用 代替 。setPreferredSize()setSize()