왜 JDialog가 setLocationRelativeTo()에서 '점프'합니까?


1

JDialog를 확장하는 클래스가 있습니다. EDT에서 완전히 초기화됩니다 (경우에 따라). 그것은 점프 후 왼쪽 모서리에 표시하고 대화 상자에서 지금 ,

public PropsDialog (JFrame parentFrame) 
{ 
    super(parentFrame); 
    //boring 
    pack(); 
    setLocationRelativeTo(getParent()); 
    setVisible(true); 
} 

결과는 위치를 의도. 내가 잘못한거야?

  0

어떤 일이 setLocationRelativeTo 후 팩()를 호출 할 때()? 22 feb. 092009-02-22 11:36:20

  0

정확히 같은 모서리에서 튀어 나오고 부모 프레임에 정확히 맞춰지지 않게됩니다 (올바른 위치). 내장 된 LaF에서만 이러한 동작이 나타나기 때문에 버그처럼 보입니다. Synth는 예상대로 작동합니다. 22 feb. 092009-02-22 12:44:38

  0

setLocationRelativeTo() 바로 전에 setVisible (false)를 호출하는 것은 어떻습니까? 22 feb. 092009-02-22 13:32:08

  0

정말 고맙게 생각합니다. 감사. 불행히도, 그것은 변하지 않습니다. Win, Linux 및 Mac에서 다른 JDK를 확인하여 동작이 동일한 지 확인합니다. 22 feb. 092009-02-22 14:51:50

1

실례 및 추가 정보를 제공해 주시겠습니까? 예를 들어 어떤 운영 체제를 테스트하고 있습니까? 스윙에는 일부 차이가 있습니다 (예 : 그놈 패널에 항목을 가져 오는 부모가없는 JDialogs 및 Windows 작업 표시 줄 및 그런 것들.

두 번째로 setLocationRelativeTo를 호출하기 전에 JDialog가 표시되어 있는지, 아니면 "지루함"으로 주석 처리 한 부분에서 다소 벗어난 것 같아요. 난 당신이 ... 단지의 경우 단지 setLocationRelativeTo 전에 코드에 빠른

System.out.println(isVisible()); 

펀치 제안

  0

당신은 가까이에있었습니다 :). 대화 상자를 리팩토링하여 JDialog를 확장했습니다. show() 호출을 놓쳤습니다. 이 메소드는 이전에 JDialog를 표시하고 리팩토링 중에 제거 된 JOptionPane에 대한 호출을 먼저 발생 시켰습니다. 그러나 클래스가 JDialog를 확장 할 때 show() 호출은 실제로이를 표시하도록 설정합니다. 25 feb. 092009-02-25 20:56:55