2010-06-21 7 views
17

Я разрабатываю приложение Java Swing. Как я могу сделать так, чтобы, когда сама программа и любые другие окна открываются, они появляются в центре экрана?Центр Swing Windows

ответ

47
frame.setLocationRelativeTo(null); 
+0

Работает ли это также на более старых версиях Java? Я удивлен, потому что некоторое время назад я понял, что это единственный способ сделать это «вручную», как описано здесь: http://www.java2s.com/Code/Java/Swing-JFC/Howtocenteraframeordialog.htm –

+1

Это действует с 1.4, но вы должны убедиться, что вы сначала упаковываете или иным образом сортируете экран. – Yishai

+2

Не совсем очевидно, когда вы этого не знаете, но поведение [setLocationRelativeTo()] (http://tinyurl.com/34syhcj) с нулевым значением действительно стоит в центре окна, как описано в javadoc. – Gnoupi

1

Вам нужно будет сделать это вручную, используя setLocation(x,y).

Что-то вроде:

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
frame.setLocation((dim.width-frameWidth)/2, (dim.height-frameHeight)/2); 

должен сделать это (не проверено).

1

Делать это вручную в среде полиэкранном дает что-то вроде этого (статический, потому что вы, вероятно, хотели бы его в служебный класс):

public static Rectangle getScreenBounds(Component top){ 
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
    GraphicsDevice[] gd = ge.getScreenDevices(); 

    if (top != null){ 
     Rectangle bounds = top.getBounds(); 
     int centerX = (int) bounds.getCenterX(); 
     int centerY = (int) bounds.getCenterY(); 

     for (GraphicsDevice device : gd){ 
      GraphicsConfiguration gc = device.getDefaultConfiguration(); 
      Rectangle r = gc.getBounds(); 
      if (r.contains(centerX, centerY)){ 
       return r; 
      } 
     } 
    } 
    return gd[0].getDefaultConfiguration().getBounds(); 
} 

public void centerWindowOnScreen(Window windowToCenter){ 
    Rectangle bounds = getScreenBounds(windowToCenter); 
    Point newPt = new Point(bounds.x + bounds.width/2, bounds.y + bounds.height/2); 
    Dimension componentSize = windowToCenter.getSize(); 
    newPt.x -= componentSize.width/2; 
    newPt.y -= componentSize.height/2; 
    windowToCenter.setLocation(newPt); 

} 

Что касается кнопки по умолчанию, это JDialog.getRootPane().setDefaultButton(btn), но кнопка должен быть уже добавлен в диалог и видимым.

+0

Я работаю с двумя дисплеями здесь. Один даже сдвинут по вертикали. Ответы camickr/Rehans работают для меня. Он центрирует окно на первом экране. Разве это не то, что ваш метод пытается выполнить? Или я чего-то не хватает? Благодаря! – Riscie

+0

@ Riscie не очень. Мой метод пытается найти, на каком экране отображается ваш компонент, поэтому вы можете сосредоточить его на этом экране не только на первом. – Taisin

+0

благодарит за разъяснения! Ну, это очень нужно! Позор это не предлагается по умолчанию! – Riscie

4

frame.setLocationRelativeTo (null); сделать открытую рамку в

компьютерного центра

С уважением, Rehan Фарук

+0

работал для меня! благодаря! – StiGMaT

3

Это легко, если вы используете Netbeans. В окне свойств JFrame перейдите к «Код» tab.There есть опция «Сгенерировать центр» .Проверьте эту опцию. JFrame будет отображаться в центре.