2009-06-02 79 views
52

有沒有辦法從JDialog標題欄中刪除關閉按鈕(「X」)?刪除Swing JDialog中的「X」按鈕

+7

我已經看到了一些應用程序,顯示另一個對話框,如果按下關閉按鈕告訴您按其他按鈕中的一個來代替。天才! – 2009-06-02 22:56:31

回答

1

根據猜測,將其設置爲PL & F裝飾並按名稱刪除組件。

+1

什麼是PL&F?謝謝。 – kenshinji 2015-05-29 03:01:57

+0

PL&F是可插拔的外觀和感覺。 Swing可以採用任意外觀和感覺的醜陋方式。 – 2015-05-30 21:30:44

+2

爲什麼醜陋?什麼是正確的方法來做到這一點? – 2015-09-05 18:56:40

53

您可以通過調用dialog.setUndecorated(true)來刪除整個對話框標題,但這意味着對話框不能再被移動。

您還可以執行dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)來防止該按鈕執行任何操作。

除此之外,我認爲沒有辦法完全去除X.

13

我相信你可以撥打dialog.setUndecorated(true)刪除標題欄。雖然不確定只是'X'。

雖然刪除'X'可能不是一個好主意,因爲您希望用戶能夠輕鬆關閉對話框。

最好的辦法是控制用戶使用dialog.setDefaultCloseOperationWindowListener單擊「X」時發生的情況。

9

從Java 1.7(AKA Dolphin或Java 7)開始,您無法禁用或刪除窗口上的關閉按鈕。您可以使用frame.setResizable(false)刪除/禁用最大化按鈕,您可以使用java.awt.Dialog或擴展它的類(如javax.swing.JDialog)刪除最小化和最大化按鈕。您可以使用frame.setUndecorated(true)刪除標題欄,邊框和按鈕,並且可以完全控制frame.setDefaultLookAndFeelDecorated(true)標題欄中所有按鈕的可見性(同時失去一些跨平臺兼容性和操作系統集成)(假設它是JFrame或的JDialog)。這是目前JDK所能實現的所有控制。

-3
static public void removeButtons(Component c){ 
    if (c instanceof AbstractButton){ 
     String accn = c.getAccessibleContext().getAccessibleName(); 
     Container p=c.getParent(); 
     //log.debug("remove button %s from %s",accn,p.getClass().getName()); 
     c.getParent().remove(c); 
    } 
    else if (c instanceof Container){ 
     //log.debug("processing components of %s",c.getClass().getName()); 
     Component[] comps = ((Container)c).getComponents(); 
     for(int i = 0; i<comps.length; ++i) 
      removeButtons(comps[i]); 
    } 
} 
4

這裏是我的經驗:

  • 使用setUndecorated(true)嘗試:使整個Dialog無形。
  • 嘗試setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE):這並沒有改變行爲。我的對話框仍然關閉。將默認關閉操作設置爲DO_NOTHING_ON_CLOSE可代表對WindowListenerwindowClosing()方法的關閉操作。

什麼工作對我來說是:

setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); 
//Remove any existing WindowListeners 
for (WindowListener wl : this.getWindowListeners()) 
     this.removeWindowListener(wl); 
this.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent e) { 
       if ("Optional condition") { 
         JOptionPane.showMessageDialog(null, "You cannot close this window"); 
       } 
     } 
});