2011-12-14 37 views
0

我正在創建一個顯示文件複製進度的對話框。我想要做的是完全刪除對話框的圖標圖像。如何從JDialog中完全刪除圖標?

我創造了這樣一種對話的提供FrameView應用程序的實例作爲論據JDialog的構造像在此之前:

public class MyAppView extends FrameView { 

    // ... 

    @Action 
    public void showOptionsDialog() { 

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

     // ... 
    } 
} 

所以,我所看到的,我需要一個父組件,使我沒有圖標的對話框。在我目前的情況下(當我沒有父框架視圖),我嘗試了下面的hack方法設置透明圖標,但它不工作,因爲我期望 - 我仍然看到對話框的標題欄中的圖標的空白區域和(什麼是最糟糕的)當我點擊這個區域時,我仍然有一個彈出窗口。

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

JOptionPane.showMessage(null, "My message"); 

望着JOptionPane的源代碼可以發現,靜態Frame JOptionPane.getRootFrame()當父組件設置爲null被用來獲取調用父:

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圖標。

而我的問題是:我做錯了什麼? 如何完全刪除JDialog的圖標,因爲它是由JOptionPane完成的?

P.S.我使用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 2011-12-14 19:29:13

+0

然後我的回答沒有幫助。除了setDecorated(false)和自己畫標題欄之外,我認爲答案在另一行。 – 2011-12-15 07:47:15

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

在NetBeans與設計方案:

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