2011-12-14 5 views
0

파일 복사 진행 상황을 보여주는 대화 상자를 만들고 있습니다. 내가 원하는 것은 대화 상자의 아이콘 이미지를 완전히 제거하는 것입니다.JDialog에서 아이콘을 완전히 제거하는 방법은 무엇입니까?

I는 다음과 같이 JDialog의 생성자에 대한 인수로 FrameView의 응용 프로그램의 인스턴스를 제공하기 전에 대화 상자 같은 종류를 만들어 : 내가 볼 수

public class MyAppView extends FrameView { 

    // ... 

    @Action 
    public void showOptionsDialog() { 

     // Creating modal options' dialog 
     JDialog optionsDialog = new JDialog(this, true); 

     // ... 
    } 
} 

그래서, 내를 만들기 위해 부모 구성 요소가 필요합니다 대화 상자에 아이콘이 없습니다. 내 현재의 경우 (부모 프레임 뷰가 없을 때) 나는 다음과 같은 해킹 방법을 투명 아이콘으로 설정했지만 예상대로 작동하지 않습니다. 대화 상자의 제목 표시 줄에있는 아이콘의 빈 영역을 볼 수 있습니다. 최악의 경우)이 영역을 클릭하면 팝업 창이 나타납니다.

JFrame dummyFrame = new JFrame(); 
Image icon = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB_PRE); 
dummyFrame.setIconImage(icon); 
JDialog myDialog = new JDialog(dummyFrame, true); 

어쨌든 아이콘을 제거 할 수 있어야합니다. 실무 예제는 JOptionPane입니다 :

하나의 부모 구성 요소가 null로 설정되어있을 때 통화에 대한 부모를 가져 오는 데 사용되는 정적 Frame JOptionPane.getRootFrame()을 찾을 수 있습니다 JOptionPane의 소스 코드를 보면
JOptionPane.showMessage(null, "My message"); 

:

public static Frame getRootFrame() throws HeadlessException { 
    Frame sharedFrame = 
     (Frame)SwingUtilities.appContextGet(sharedFrameKey); 
    if (sharedFrame == null) { 
     sharedFrame = SwingUtilities.getSharedOwnerFrame(); 
     SwingUtilities.appContextPut(sharedFrameKey, sharedFrame); 
    } 
    return sharedFrame; 
} 

따라서 다음과 같이 대화 상자를 만들려고했습니다.

JDialog myDialog = new JDialog(JOptionPane.getRootFrame(), true); 

그러나 아직 성공하지 못했습니다. 이 코드 스 니펫을 적용하려고하면 표준 자바 아이콘이 나타납니다.

그리고 내 질문은 : 내가 뭘 잘못하고있는거야? JDialog의 아이콘을 완전히 제거하는 방법은 JOptionPane입니까?

P. 나는 JDK6을 사용한다.

답변

1

해결책은 대화가 아닌 크기 조정을하는 것입니다 그리고 그것은 어떤 부모 창에 아이콘이없는 것입니다.

JDialog myDialog = new JDialog(new Frame(), true); 
myDialog.setResizable(false); 
myDialog.setVisible(true); 

불행히도 대화 상자의 크기를 조정할 수있는 경우 투명 아이콘을 설정하는 것 외에는 아이콘을 제거 할 수 없습니다.

0

WindowsXP의 JDK7을 사용하더라도 아이콘에 문제가 없습니다. 대화 상자에서 표시하지 않은 아이콘의 팝업 메뉴 setFocusableWindowState (false).

코드처럼 JFrame의는 :

public MyJFrame() { 
    //URL url = this.getClass().getResource("transparent.gif"); 
    //if (url != null) { 
    // ImageIcon icon = new ImageIcon(url); 
    // if (icon != null) 
    //  setIconImage(icon.getImage()); 
    //} 
    BufferedImage icon = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB_PRE); 
    //icon.setRGB(0, 0, 0x00000000); 
    setIconImage(icon); 
} 

JFrame dummyFrame = new MyJFrame(); 
    JDialog myDialog = new JDialog(dummyFrame, true); 
    myDialog.setIconImage(dummyFrame.getIconImage()); // Not needed. 
    myDialog.setFocusableWindowState(false); 
    myDialog.setVisible(true); 
+0

이 대화 상자의 제목은 제목 표시 줄의 왼쪽에 정렬되어 있습니까?왼쪽에는 투명 16x16 아이콘이있는 것처럼 보이므로 제목이 아이콘 너비만큼 오른쪽으로 이동하는 것처럼 보입니다. 'setFocusableWindowState (false)'는 제목 표시 줄을 그리기 때문에 원하지 않는 동작이 발생합니다. 'JOptionPane'의 대화 상자를 살펴보십시오. 원하는대로 나타납니다. – Ezze

+0

그럼 내 대답은 도움이되지 않습니다. setDecorated (false) 게다가 제목 표시 줄을 그리기 나는 다른 줄에 대답을 생각합니다. –

3

다음과 같이 원하는 방향으로 나아질 수 있습니다. 디자인 옵션

넷빈즈에서
  JProgressBar pb = new JProgressBar(); 
      JOptionPane op = new JOptionPane(pb, JOptionPane.PLAIN_MESSAGE, 
        JOptionPane.DEFAULT_OPTION); 
      JDialog dlg = op.createDialog(MyJFrame.this, "Progress"); 
      dlg.setVisible(true); 
2

:

initComponents(); 
Image img = new BufferedImage(1, 1,BufferedImage.TYPE_INT_ARGB_PRE); 
this.setIconImage(img); 
+1

이것은 몇 년 전부터 기존 답변을 대부분 복제 한 것입니다. 이것이 어떻게 다른지 설명해 주시겠습니까? –

관련 문제