2014-10-02 1 views
2

문제를 조사 할 때 대부분의 사람들은 반대 (즉, 최소화/닫기 버튼 제거)를 원합니다. 내가 대화 상자를 표시 할 때JDialog가 최소화/닫기 버튼을 표시하지 않음

private class TestDialog extends JDialog 
{ 
    public static final String title_ = "Test Dialog"; 

    public TestDialog(JFrame parent) 
    { 
     super(parent,title_,true); 
     setMinimumSize(new Dimension(500,500)); 
     setLocationRelativeTo(null); 
     setUndecorated(false); 
     setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
    } 
} 

내가 얻을 다음 :

enter image description here

다른 나는 reoccurrent setUndecorated와 여기 setDefaultCloseOperation

를 사용하여 더 성공을 했어 나의 코드 info :
OS : 우분투
자바 버전 : 1.7.0_55

+0

닫기/최소화 버튼을 제거 하시겠습니까? 왜 당신은 JDialog보다는 JWindow를 상속받지 않습니까? –

+0

닫기/최소화 버튼을 표시하고 싶습니다. JWindow는 제목 표시 줄을 포함하지 않기 때문에 적합하지 않을 것입니다. – Harry

+0

JDialog 대신 JFrame을 사용하십시오. – Gladiator

답변

3

어디에서 일들이 잘못 될지는 명확하지 않지만 아래의 예제는 Java 6 우분투에서 작동합니다. 문제를 해결하는 데 도움이 될 수 있습니다. 모두top-level containerevent dispatch thread에 작성해야합니다.

super(parent, title, true); 

super(null, title, Dialog.ModalityType.MODELESS); 

에 다음 창 닫기 버튼이 나타납니다 :

enter image description here

import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.WindowConstants; 


public class TestDialog extends JDialog { 

    public static final String title = "Test Dialog"; 

    public TestDialog(JFrame parent) { 
     super(parent, title, true); 
     add(new JPanel(){ 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(320, 240); 
      } 
     }); 
     pack(); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
    } 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TestDialog(null).setVisible(true); 
      } 
     }); 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. @trashgod. 당신의 정확한 예를 시도했지만, 나는 여전히 가까이있는 버튼을 얻지 못합니다. jdk (1.6.0)의 이전 버전을 설치했지만 아직 아무것도 설치하지 않았습니다. 내가 지금 생각할 수있는 유일한 것은 우분투 14.04 및/또는 그놈에 관한 문제입니다. – Harry

+0

@ 해리 : Java 7을 사용하는 Ubuntu 14에서도 동일하게 나타납니다. – trashgod

+2

OK. 그것은 GNOME 셸에 문제가있는 것 같습니다. Unity (Ubuntu의 기본값)로 전환하면 작동합니다. 도움을 주셔서 감사합니다. @trashgod – Harry

1

난 당신이 다음 줄을 변경하는 경우, 종류의 임시 해결책을 발견했다 그놈을 사용할 때. 나는 이것이 다른 문제가 무엇을 일으킬 수 있는지 확실하지 않습니다.

+0

나는 컴파일에 놀랐습니다. 해당 서명과 일치하는 생성자가 여러 개 있기 때문에 "모호한 생성자"오류가 발생합니다. 그러나 나는이 방법을 발견했다 :'super (null, title, Dialog.ModalityType.MODELESS);' – Harry

+1

나쁘다. 실제로 Dialog.ModalityType.MODELESS를 직접 사용했다. 원래 예제에서 코드를 복사하고 마지막 매개 변수를 변경하는 것을 잊었습니다. – Fooble

관련 문제