Swing:如何在第一个setVisible()中将JFrame N像素放置在远离屏幕中心的位置?

时间:2009-11-06 06:50:01

标签: swing jframe

在调用setVisible(true)之前,将JFrame N像素(比如x方向300像素)远离屏幕中心定位的代码是什么?

4 个答案:

答案 0 :(得分:8)

我通常会执行以下操作来使JFrame居中。您可以将偏移量添加到wdwLeft变量,如列表中所示,以将帧移离中心。 (对setPreferredSize()的调用是多余的,只有在这个演示工作。)

package testapplication;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import javax.swing.JFrame;

public class MyJFrame extends JFrame {

    MyJFrame() {
        super("Test");
        Dimension screenSize = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());
        setPreferredSize(new Dimension(200, 200));
        Dimension windowSize = new Dimension(getPreferredSize());
        int wdwLeft = 300 + screenSize.width / 2 - windowSize.width / 2;
        int wdwTop = screenSize.height / 2 - windowSize.height / 2;
        pack();   
        setLocation(wdwLeft, wdwTop);
    }

    public static void main(final String [] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                final MyJFrame jf = new MyJFrame();
                jf.setVisible(true);
            }
        }
       );
    }
 }

您可以添加其他逻辑,以确保偏移窗口完全在getMaximumWindowBounds()确定的屏幕内。

答案 1 :(得分:2)

Frame Javadoc提供的一些信息可以帮助您在使用setLocation()方法调用setVisible(true)之前设置JFrame的位置

您可以致电GraphicsEnvironment.getCenterPoint()

获取屏幕的中心点

答案 2 :(得分:1)

简单设置:

FormName.setLocation(X-Axis Coordinate, Y-Axis Coordinate);

答案 3 :(得分:0)

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension windowSize = window.getSize();
int windowX = Math.max(0, (screenSize.width  - windowSize.width ) / 2);
int windowY = Math.max(0, (screenSize.height - windowSize.height) / 2);
f.setLocation(windowX, windowY);  // Don't use "f." inside constructor.

                                   OR

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
f.setSize(screenSize.width - 4, screenSize.height - 4);
f.validate();                // Make sure layout is ok