2011-12-14 32 views
0

ファイルのコピーの進行状況を示すダイアログを作成しています。私がしたいのは、ダイアログのアイコンイメージを完全に削除することです。JDialogからアイコンを完全に削除する方法は?

私はこのような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です:

1は、親コンポーネントが 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); 

まだ成功はありません。このコードスニペットを適用しようとすると標準のJavaアイコンが表示されます。

私の質問は次のとおりです。何が間違っているのですか? JOptionPaneによって行われたJDialogのアイコンを完全に削除する方法は?

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

多分あなたが望む方向に次のようなものがあります。設計オプションとNetBeansで

  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

これは、数年前の既存の回答とほとんど同じです。これがどう違うか説明できますか? –

関連する問題