2014-12-21 4 views
2

JDialog에서 제목 표시 줄을 제거 할 수 있습니까?JDialog : 제목 표시 줄 제거, 테두리 유지

기본 SSCCE은 다음과 같습니다

JDialog with full titlebar and borders

하지만이되는 JDialog의 제목 표시 줄을 원하지 않는 :

package test; 

import javax.swing.JDialog; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.SwingUtilities; 

public class SSCCE extends JFrame { 
    private JDialog dialog; 

    public SSCCE() { 
     dialog = new JDialog(); 
     dialog.setSize(100, 100); 
     dialog.add(new JList<>(new String[] { "One", "Two", "Three" })); 
     dialog.setUndecorated(true); 

     setSize(300, 200); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    public void showDialog() { 
     dialog.setLocationRelativeTo(this); 
     dialog.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       SSCCE ex = new SSCCE(); 
       ex.setVisible(true); 
       ex.showDialog(); 
      } 
     }); 
    } 
} 

내가이 참조를 실행합니다. 표준 대답은 setUndecorated(true)입니다. 하지만 창 테두리도 잃어 버리고 나는 그것을 원하지 않습니다. 다음과 같습니다

JDialog with just the borders

가 어떻게 그것을 달성 않습니다

JDialog with no titlebar and no borders

이 모형과 같이 내가 원하는 무엇입니까?

편집 :

은 내가 불화물 테두리 중 하나를가는 시도,하지만 난 이상한 결과를 얻고있다. 테스트를 위해 "RootPane.errorDialogBorder"를 사용하고 대화 상자 주위에 붉은 색 테두리가 나타날 것으로 예상됩니다. 하지만 그 대신 내가 가지고이 :

은 "RootPane.frameBorder"국경의 초점이 맞지 버전처럼 나에게 보이는

JDialog with LAF border

. 왜 내가 대신 그걸 가져 왔을 까?

+0

* "JDialog에서 제목 표시 줄을 제거 할 수 있습니까? 경계선을 유지할 수 있습니까?"* 짧은 대답은 일반적으로 아니오입니다. 일부 룩앤필은 자체 프레임 보드를 제공하고 일부는 운영 체제를 사용하므로 문제가 더욱 복잡해집니다. – MadProgrammer

+0

@Tobbe 패널에 테두리를 추가하고 패널을 jdialog에 추가하십시오 –

+0

@FastSnail 그 종류를 만드는 방법을 모르겠습니다. 경계. 어떻게 든 현재의 LaF 경계 스타일을 기반으로해야합니다. 아이디어가 있습니까? – Tobbe

답변

3

어떻게 든 현재의 LaF 테두리 스타일을 기반으로해야합니다.

실제 대화/프레임 테두리는 사용할 수 없습니다.

텍스트 필드에서 눈에 띄기 위해 팝업을 강조 표시하려면 테두리가 필요합니다. 가장 가까운 곳은 LAF에서 정의한 테두리를 사용하는 것입니다. 예를 들어 UIManager에 정의 된 "TitledBorder.border"속성을 사용할 수 있습니다. 단순 경계이지만 각 LAF마다 약간 다릅니다.

UIManager Default을 살펴보십시오. 각 LAF의 모든 경계선을 표시합니다.

+0

UIManager 기본 응용 프로그램에 대한 링크를 제공해 주셔서 감사합니다. 매우 유용합니다! 하지만 실제로 이상한 결과를 얻은 국경 중 하나를 사용하려고 할 때 제 원래의 질문에 대한 편집을 참조하십시오. – Tobbe

+0

@Tobbe, 왜 테두리 색상이 UIManager 기본값과 다른지 알 수 없습니다. Border를 그리는 코드는'MetalBorders' 클래스에서 찾을 수 있습니다. 그러나 실제 색상이 어디에서 결정되었는지를 추적 할 수는 없습니다. – camickr

+0

그리고 그것은 색상뿐 아니라 그 내부 라인이기도합니다! 그것은 모두 매우 이상합니다. – Tobbe