2010-06-21 8 views
17

자바 스윙 애플리케이션을 개발 중입니다. 프로그램 자체와 다른 창이 열리면 화면 중앙에 나타나도록하려면 어떻게해야합니까?센터 스윙 윈도우

답변

47
frame.setLocationRelativeTo(null); 
+0

이전 버전의 Java에서도 작동합니까? 나는 잠시 전에 내가 할 수있는 유일한 방법이 "손으로"라고 생각했기 때문에 놀랐다. http://www.java2s.com/Code/Java/Swing-JFC/Howtocenteraframeordialog.htm –

+1

1.4에서 유효하지만 화면을 올바르게 꾸밀거나 크기를 확인해야합니다. – Yishai

+2

모르는 경우에는 분명하지 않지만 javadoc에 설명 된대로 [setLocationRelativeTo()] (http://tinyurl.com/34syhcj)의 동작은 null을 사용하여 실제로 창을 가운데에 맞 춥니 다. – 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);

감사 cetner의 프레임이 열려 있도록 Rehan 루크

+0

나를 위해 일했습니다! 감사! – StiGMaT

3

당신이 넷빈즈를 사용하는 경우 그것은 간단합니다. JFrame의 속성 창에서 "코드"탭으로 이동하십시오. "Generate center"으로 옵션이 있습니다. 해당 옵션을 선택하십시오. JFrame이 가운데에 표시됩니다.