Swing不丑系列:JComboBox
一直都是一只菜鳥..不管別人怎么說.
一直認(rèn)為Swing不丑..所以打算這段時(shí)間寫個(gè)Swing不丑系列(獻(xiàn)丑了)

版權(quán)聲明 版權(quán)所有 @chensiyu
引用請注明來源



話說JComboBox 默認(rèn)外觀確實(shí)不是太好看..在由于本人有時(shí)實(shí)在太賤.就是想要它好看...所以..這不..又折騰了..
其實(shí)這個(gè)ComboBox 剛開始想改變外觀 只考慮到renderer 畢竟swing上所有的界面 顯示全靠renderer來控制..
所以 著手寫ComboBoxRenderer. 總是覺的 JComboBox 似乎不太好搞定 因?yàn)樗坏酗@示框 還有小鍵頭.
還有彈出的List 還有ScrollBar..等等.. 似乎不那么好搞...不過Swing是強(qiáng)大的 ..只要你能想到..就可以做到.
那么我們要做幾件事.
1: 重載JComboBox 并且設(shè)置面板透明
2: 新建renderer 實(shí)現(xiàn)ListCellRenderer接口
3: 重載BasicComboBoxUI
1.重載JComboBox 并且設(shè)置面板透明 設(shè)置renderer 以及設(shè)置 ui




























2.新建renderer 實(shí)現(xiàn)ListCellRenderer接口.注意.這里的ComboBoxRenderer它是控制combobox彈出的List 并非控制JComboBox的 注意 他實(shí)現(xiàn)的是ListCellRenderer


























3重載BasicComboBoxUI .sure 這里當(dāng)然要注意.因?yàn)樗荍ComboBox的繪制機(jī)制
這里包括ComboBox右邊的那個(gè)箭頭的Button.(我們已經(jīng)通過重寫 createArrowButton 來改變這個(gè)Button);
至于彈出的List ,it in here, look it ..createPoput(); it create ComboPopup.(不好意思 最近在學(xué)英文 總是那么順口來那么幾句.)
這里存在一個(gè)ScrollPane 它包含了List.并且我們重寫ScrollPane的paintBorder方法 來讓我們畫出List的Border

































































































ok. 那么到這里 ComboBox這塊已經(jīng)end 但是似乎還有個(gè)問題存在 那就是createPopup 方法里的ScrollPane的滾動(dòng)條還是有點(diǎn)丑.
so。.next 我們搞定 it.
1:繼承 ScrollBar 并且 setUI();
2:繼承 BasicScrollBarUI 我們來G出我們的效果.
paintThumb 繪制scrollbar里拖動(dòng)的小box 我們先畫個(gè)邊框 and draw two Orange line.
paintTrack 繪制scrollbar里小box的軌跡.也就是那個(gè)啥(術(shù)語怎么說來著?拖拽滑塊?).
注意:我們首先將Graphics設(shè)置透明后 在去畫面板 然后立刻把Graphics設(shè)置為不透明..
這樣是為了能讓我們把軌跡左邊邊界畫出來...
createIncreaseButton draw down arrowButton 小心 千萬不要use JButton button = new JButton();
should use BasicArrowButton 不然你將無法click this button 并產(chǎn)生你想要的效果..
你猜的到 createDecreaseButton(); 方法是干什么的..(笨蛋 上面那個(gè)Button啦);

















































































posted on 2011-03-23 16:58 相信 閱讀(7561) 評論(12) 編輯 收藏 所屬分類: Swing文章