2011-07-02 41 views
4

我目前正在開發一個Swing應用程序,它將在每個平臺上執行。一般應用程序不是問題,它在Windows,Linux和Mac上運行良好。JComboBox contains Mac上的圖標太小

但我有這個JComboBox除了文本之外還顯示Icon(大小50x50)。 我明白,Mac有嚴格的佈局規則,超大號JComboBoxes不是真的想要。 問題是,使用Mac Look-and-Feel,我的JComboBoxes有正確的寬度,但高度太小(相同的高度,如果沒有圖標)。因此,我的Icon的頂部和底部部分被切斷,看起來不太好看。

顯示JComboBox沒有Icon沒有什麼意義,但我還沒有找到一個解決辦法,到目前爲止以正確的高度(甚至設置MinimumSizePreferredSizeMaximumSizeicon.getIconHeight()+2沒有幫助)顯示JComboBox。使用Windows或Linux JComboBoxes顯示正確。

有沒有我可以使用的任何屬性,或者我真的必須忍受切斷的圖標?

+1

您是否嘗試過創建與您的JComboBox使用自定義的ListCellRenderer? –

+0

JComboBox.setPrototypeDisplayValue(「XXXXXXXXXX」); – mKorbel

+0

謝謝,但我嘗試過,但沒有任何工作。我已經在使用setIcon(...)和setText(...)的地方使用了ListCellRenderer。 奇怪的是,我使用BoxLayout佈局組件,在ComboBoxes後面有灰色背景(不應該存在)和間距,因此看起來高度計算正確 - 仍然顯示太小。 我發現這個[鏈接](http://tinyurl.com/3k2a4es)關於JComboBoxes的大小 - 看起來,MacOs對組件大小相當嚴格,這讓我擔心,確實沒有辦法顯示圖標正確:( – MikeG

回答

3

使用CustomComboBoxDemo(如How to Use Combo Boxes所示),自定義渲染器按預期工作;但是UI委託,com.apple.laf.AquaComboBoxUI,忽略了請求,諸如這樣的:

petList.setPreferredSize(new Dimension(200, 130)); 

enter image description here

作爲替代,javax.swing.plaf.metal.MetalComboBoxUI產生如下所示的結果。請注意,箭頭和滾動條(未顯示)保持不變。另外,箭頭可能會改變,如here所示。

附錄:您可以更改UI默認設置ad lib,如下所示。

//Create the combo box. 
JComboBox petList = new JComboBox(intArray); 
Color bg = (Color) UIManager.get("ComboBox.background"); 
Color fg = (Color) UIManager.get("ComboBox.foreground"); 
UIManager.put("ComboBox.selectionBackground", bg); 
UIManager.put("ComboBox.selectionForeground", fg); 
petList.setUI(new MetalComboBoxUI()); 
ComboBoxRenderer renderer = new ComboBoxRenderer(); 

.... 

enter image description here

+0

對於更昂貴的平臺的高稅+1 – mKorbel

+0

我認爲這將做的伎倆(必須等到明天測試它),但這意味着,我的JComboBoxes將不再像通常的MacOS ComboBoxes - 不 - 改變箭頭可能會有所幫助,但是圓形邊框和藍色「發光」可能不太容易複製。 因此,在「看起來像MacOS但太小」和「 「正確的尺寸,但看起來不像MacOS」 – MikeG

+0

注意:滾動條和按鈕仍然是Mac L&F。You _can_ cha箭頭,但它不是_required_。您可以更改金屬默認顏色,如上所示。兩位代表使用不同的默認值,因此您需要進行實驗。此外,請在「os.name」屬性中對此進行調整。 – trashgod