자바 스윙 애플리케이션을 개발 중입니다. 프로그램 자체와 다른 창이 열리면 화면 중앙에 나타나도록하려면 어떻게해야합니까?센터 스윙 윈도우
답변
frame.setLocationRelativeTo(null);
setLocation(x,y)
을 사용하면 손으로해야합니다. 같은
뭔가 :
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((dim.width-frameWidth)/2, (dim.height-frameHeight)/2);
이 (테스트하지)를해야한다. 멀티 스크린 환경에서 손으로 그 일을
가 (당신은 아마 유틸리티 클래스에 원하는 것 '원인, 정적) 같은 것을 제공 : 기본 버튼으로
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)
을하지만 버튼 대화 상자에 이미 추가되어 표시되어야합니다.
두 개의 디스플레이로 작업합니다. 하나는 수직으로 이동합니다. camickr/Rehans의 답변이 저에게 효과적입니다. 창을 첫 번째 화면의 중앙에 배치합니다. 그것은 당신의 방법이 시도하려고하는 것이 아닙니까? 아니면 여기에 뭔가 빠졌나요? 감사! – Riscie
@Riscie 정말 아닙니다. 내 방법은 구성 요소가 표시되는 화면을 찾으려고하므로 첫 번째 구성 요소뿐만 아니라이 화면에도 배치 할 수 있습니다. 명확히 해 주셔서 감사합니다. – Taisin
! 음 그게 꽤 필요해! 수치심은 기본적으로 제공되지 않습니다! – Riscie
당신이 넷빈즈를 사용하는 경우 그것은 간단합니다. JFrame의 속성 창에서 "코드"탭으로 이동하십시오. "Generate center"으로 옵션이 있습니다. 해당 옵션을 선택하십시오. JFrame이 가운데에 표시됩니다.
이전 버전의 Java에서도 작동합니까? 나는 잠시 전에 내가 할 수있는 유일한 방법이 "손으로"라고 생각했기 때문에 놀랐다. http://www.java2s.com/Code/Java/Swing-JFC/Howtocenteraframeordialog.htm –
1.4에서 유효하지만 화면을 올바르게 꾸밀거나 크기를 확인해야합니다. – Yishai
모르는 경우에는 분명하지 않지만 javadoc에 설명 된대로 [setLocationRelativeTo()] (http://tinyurl.com/34syhcj)의 동작은 null을 사용하여 실제로 창을 가운데에 맞 춥니 다. – Gnoupi