2012-03-03 106 views
41

我是一个.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 Application那里有一个CenterScreen Position。或者,如果上面的代码是正确的,我会在什么事件?

感谢您阅读本文。

+0

你在用什么? JFrame的?如果是这样,在将可见性设置为true之前,请先尝试设置位置。 – dpp 2012-03-03 04:04:44

+0

@domanokz是先生。 – 2012-03-03 04:09:13

+0

我在这里闻到Pinoy。有关JFrame的参考http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/JFrame.html。因为它是超类框架http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/Frame.html。对于Frame的超类,Window http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/Window.html ...在最后一个链接上,您将看到由属性setter继承的属性设置器Window类中的JFrame,setLocationRelativeTo。 – dpp 2012-03-03 04:19:28

回答

91

在JFrame上调用pack之后,只需将位置设置为null,就是这样。

例如,

JFrame frame = new JFrame("FooRendererTest"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().add(mainPanel); // or whatever... 
    frame.pack(); 
    frame.setLocationRelativeTo(null); // *** this will center your app *** 
    frame.setVisible(true); 
+1

先生,如果你介意,我会在哪里放这个代码?对不起,如果我问这个没有道理的东西,因为我对环境不是很熟悉。 – 2012-03-03 04:10:30

+0

@johntotetwoo把它放在你初始化JFrame的地方。你用什么IDE?你是否让IDE为你自动创建窗口?如果是这样,找到JFrame的初始化(新的Jframe)... – dpp 2012-03-03 04:13:14

+0

我使用NetBeans 7.1先生。我会检查初始化代码。 – 2012-03-03 04:15:56

-2

尝试使用这样的:

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

我希望这会有所帮助。

把这个源代码的顶部:

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); 
} 

好运:)

-2

使用这个函数u可以定义自己赢得位置

setBounds(500, 200, 647, 418); 
6

下面的例子为中心的屏幕上边框:

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); 
} 
+0

'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);'LOL! 'setLocationRelativeTo(null);'短得多。 – 2016-08-31 13:57:58

0

其实,你不是真的有代码,以使形式到达中心屏幕。

只需修改JFrame的性质
以下步骤如下修改:

  • 右键单击窗体上
  • 变化FormSize政策 - 生成调整大小代码
  • 然后编辑形式位置X -200 Y- 200

你完成了。为什么要采取编码的痛苦。 :)

2

更改此:

public FrameForm() { 
    initComponents(); 
} 

这样:

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

在答案中编辑格式。但目前还不清楚这是什么以及为什么它是一个解决方案。请编辑并解释。 – 2015-06-24 10:59:51

1
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(); 
    } 

} 
} 
0

如果使用NetBeans IDE中右键点击表格然后

属性 - >代码 - >检查生成中心