Java 如何在中央屏幕中定位窗体?

Java 如何在中央屏幕中定位窗体?,java,swing,netbeans,layout-manager,Java,Swing,Netbeans,Layout Manager,我是一名.Net开发人员,但不知何故,出于某种额外的原因,我的任务是用java创建一个简单的应用程序。我能够创建该应用程序,但我的问题是,当应用程序启动时,如何在屏幕上居中显示表单 这是我的密码: private void formWindowActivated(java.awt.event.WindowEvent evt) { // Get the size of the screen Dimension dim = Toolkit.getDefaultToo

我是一名.Net开发人员,但不知何故,出于某种额外的原因,我的任务是用java创建一个简单的应用程序。我能够创建该应用程序,但我的问题是,当应用程序启动时,如何在屏幕上居中显示表单

这是我的密码:

private void formWindowActivated(java.awt.event.WindowEvent evt) 
{
        // Get the size of the screen
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

        // Determine the new location of the window
        int w = this.getSize().width;
        int h = this.getSize().height;
        int x = (dim.width-w)/2;
        int y = (dim.height-h)/2;

        // Move the window
        this.setLocation(x, y);
}
上面的代码工作正常,但问题是我看到表单从最左上方移动到中央屏幕。我还尝试在
formWindowOpened
事件中添加该代码,但仍然显示相同的操作。有更好的方法吗?就像在
.NET应用程序中一样
有一个
中心屏幕位置
。或者,如果上面的代码是正确的,我将把它放在什么事件上


感谢阅读。

在JFrame上调用pack后,只需将位置相对值设置为null即可

e、 g

尝试使用以下方法:

this.setBounds(x,y,w,h);

我希望这会有帮助

将此放在源代码的顶部:

import java.awt.Toolkit;
然后编写以下代码:

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
    int lebar = this.getWidth()/2;
    int tinggi = this.getHeight()/2;
    int x = (Toolkit.getDefaultToolkit().getScreenSize().width/2)-lebar;
    int y = (Toolkit.getDefaultToolkit().getScreenSize().height/2)-tinggi;
    this.setLocation(x, y);
}

祝您好运:)

使用此功能,您可以定义您赢得的位置

setBounds(500, 200, 647, 418);

以下示例在屏幕上居中显示一帧:

package com.zetcode;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;


public class CenterOnScreen extends JFrame {

    public CenterOnScreen() {

        initUI();
    }

    private void initUI() {

        setSize(250, 200);
        centerFrame();
        setTitle("Center");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void centerFrame() {

            Dimension windowSize = getSize();
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            Point centerPoint = ge.getCenterPoint();

            int dx = centerPoint.x - windowSize.width / 2;
            int dy = centerPoint.y - windowSize.height / 2;    
            setLocation(dx, dy);
    }


    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                CenterOnScreen ex = new CenterOnScreen();
                ex.setVisible(true);
            }
        });       
    }
}
为了使一个画面在屏幕上居中,我们需要获得局部图像 图形环境。从这个环境中,我们确定 中心点。结合框架尺寸,我们管理 使框架居中。
setLocation()
是 将框架移动到中心位置

请注意,
setLocationRelativeTo(null)
实际上就是这样做的:

public void setLocationRelativeTo(Component c) {
    // target location
    int dx = 0, dy = 0;
    // target GC
    GraphicsConfiguration gc = getGraphicsConfiguration_NoClientCode();
    Rectangle gcBounds = gc.getBounds();

    Dimension windowSize = getSize();

    // search a top-level of c
    Window componentWindow = SunToolkit.getContainingWindow(c);
    if ((c == null) || (componentWindow == null)) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
        gcBounds = gc.getBounds();
        Point centerPoint = ge.getCenterPoint();
        dx = centerPoint.x - windowSize.width / 2;
        dy = centerPoint.y - windowSize.height / 2;
    }

  ...

  setLocation(dx, dy);
}

实际上,您不必编写代码使表单进入centerscreen

只需修改jframe的属性
按照以下步骤进行修改:

  • 右键单击表单
  • FormSize
    策略更改为-生成调整大小代码
  • 然后编辑表单位置X-200 Y-200
你完了。为什么要忍受编码的痛苦

改变这一点:

public FrameForm() { 
    initComponents(); 
}
为此:

public FrameForm() {
    initComponents();
    this.setLocationRelativeTo(null);
}

如果您使用NetBeans IDE,请右键单击表单,然后


属性->代码->签出生成中心

您在使用什么?JFrame?如果是这样,在将可见性设置为true之前,请先尝试设置位置。我闻到了皮诺的味道。供JFrame参考。因为它是超类框架。对于Frame的超类,窗口。。。在最后一个链接上,您将看到JFrame从窗口类setLocationRelativeTo继承的属性设置器。先生,如果您介意的话,我将把这段代码放在哪里?“如果我问这个noobish的问题,我很抱歉,因为我对环境不是很熟悉。”johntotetwoo把它放在初始化JFrame的地方。你使用什么IDE?您是否让IDE自动为您创建窗口?如果是这样,请查找JFrame的初始化(新JFrame)…我使用的是NetBeans 7.1 sir。我将检查初始化代码。这不是将左上角设置在屏幕的中心,而不是将整个画面居中吗?@Xynariz:不,如果您在
setLocationrelativeTo(null)
之前先调用
pack()
,则不会,但您可以自己用一个小测试程序回答这个问题。事实上,你为什么不检查一下呢?在你的答案中编辑了格式。但目前还不清楚这是什么,以及为什么这是一个解决方案。请编辑并解释。
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();Point centerPoint=ge.getCenterPoint();int dx=centerPoint.x-windowSize.width/2;int dy=centerPoint.y-windowSize.height/2;设定位置(dx,dy)哈哈<代码>setLocationRelativeTo(空)要短得多。这应该是可以接受的原因,其中包含一个解释如果有人没有真正执行拖放方法会发生什么。你会如何考虑你的答案比?
public FrameForm() {
    initComponents();
    this.setLocationRelativeTo(null);
}
public class Example extends JFrame {

public static final int WIDTH = 550;//Any Size
public static final int HEIGHT = 335;//Any Size

public Example(){

      init();

}

private void init() {

    try {
        UIManager
                .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

        SwingUtilities.updateComponentTreeUI(this);
        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
        setSize(WIDTH, HEIGHT);

        setLocation((int) (dimension.getWidth() / 2 - WIDTH / 2),
                (int) (dimension.getHeight() / 2 - HEIGHT / 2));


    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (UnsupportedLookAndFeelException e) {
        e.printStackTrace();
    }

}
}