2011-03-13 36 views
1

我使用Swing製作了一個用戶界面,並且我希望我用於自定義對話框的按鈕具有與標準對話框中相同的樣式。使用外觀中的標準按鈕

例如,在附加的圖像中我有一個自定義對話框和標準文件選擇對話框。我希望文件選擇對話框中的「確定」和「取消」按鈕用於我的自定義對話框中的等效按鈕。

我希望我的應用程序使用它運行的任何操作系統的默認系統外觀,因此我不想嘗試手動重新創建這些標準按鈕。使用自動提供這些按鈕的更剛性的Swing類也無法正常工作,因爲我想在我的UI中的其他更奇特的地方使用它們。

有沒有簡單的解決這個問題?

example image

回答

1

對不起,是壞消息,但它看起來像有做這種跨平臺的標準方法。默認按鈕上的行爲,助記符和圖標通過每種外觀和感覺以非常特定的方式處理。

下面是一個SO問題,回答關於如何設置the default OK and Cancel buttons on a dialog問題(默認按鈕使用getRootPane().setDefaultButton(...)設置和取消按鈕需要自定義鍵盤監聽器。如果你非常幸運,設置默認按鈕可能添加一個圖標,取決於UI的編碼方式

This forum thread addresses the issue of getting icon resources from UIManager。每個LaF都有一組默認的UI,比如顏色,文本,邊框和圖標。但是對於非標準的圖標,比如按鈕上的圖標,沒有任何保證,但是如果你告訴我你在提供的截圖中使用了哪個LaF,我可以查看它的自定義UI類使用的資源鍵(或者如果你有源代碼,你可以自己找到它)。然後,您可以編寫一個幫助器方法,通過這些鍵查找圖標,並在找到它們時將它們添加到按鈕中。

+0

感謝您的信息。在屏幕截圖中,我使用的是LaF for Ubuntu系統,但希望這個問題是我可以讓程序使用它運行的任何平臺的系統LaF,並且在每個平臺上看起來相當原生。由於沒有簡單的方法來做到這一點,我會嘗試手動調整的東西,以便它在各種平臺上看起來不錯,或者只是選擇一個LaF並在所有平臺上使用它... – Oliver 2011-03-17 02:04:53

+0

最好的你可以做的是使用UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()),它將在當前操作系統上使用最合適的LaF。即便如此,「本土性」的確切水平取決於實施,所以它永遠不會是完美的。祝你好運! – BoffinbraiN 2011-03-17 10:43:30

0

JButton.setUI(ButtonUI)設置只是一個JButton的用戶界面。使用連同工廠:

public static JButton createStyledButton(String text) { 
    JButton button = new JButton(text); 
    button.setUI(STYLE_UI); 
    return button; 
}  
+1

不能回答他的問題。標準jfilechooser小部件中的Cancel和OK按鈕與其自定義對話框之間的區別在於應用了圖標和mmnemonics。 – Tedil 2011-03-13 17:58:16

+0

我已經這樣做了 - 在所示的圖像中,正在使用系統外觀和感覺。我感興趣的是獲得一些用於該系統外觀和感覺的按鈕的標準設計,以便在我的應用程序的其他地方使用,而不是試圖通過使用帶有文本+圖像的JButton來重新構建它們。 – Oliver 2011-03-13 17:58:45

+0

@Oliver我編輯答案與自定義樣式的按鈕ui希望它會幫助解決您的要求。 – u449355 2011-03-13 18:29:59