Java 如何在中央屏幕中定位窗体?
我是一名.Net开发人员,但不知何故,出于某种额外的原因,我的任务是用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
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();
}
}
}