JComboBox的下拉框向上
2009-09-22 00:00:00 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨绘い鎺嬪灪閵囧嫰骞囬姣挎捇鏌熸笟鍨妞ゎ偅绮撳畷鍗炍旈埀顒勭嵁婵犲嫮纾介柛灞捐壘閳ь剛鎳撻~婵嬪Ω閳轰胶鐤呯紓浣割儐椤戞瑩宕ョ€n喗鐓曟い鎰靛亝缁舵氨绱撻崘鈺傜婵﹤顭峰畷鎺戔枎閹搭厽袦婵犵數濮崑鎾绘⒑椤掆偓缁夌敻骞嗛悙鍝勭婵烇綆鍓欐俊鑲╃磼閹邦収娈滈柡灞糕偓鎰佸悑閹肩补鈧尙鏁栧┑鐐村灦閹稿摜绮旈悽绋课﹂柛鏇ㄥ灠閸愨偓濡炪倖鍔﹀鈧繛宀婁邯濮婅櫣绱掑Ο璇茶敿闂佺ǹ娴烽弫璇差嚕婵犳碍鏅插璺猴工瀹撳棝姊虹紒妯哄缂佷焦鎸冲畷鎴﹀箻鐠囧弶宓嶅銈嗘尰缁嬫垶绂嶉悙顒佸弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

最近学习SWING,改变JComboBox的的显示方式,这里是将JComboBox的下拉框向上显示,以下为详细代码:
package kissJava.JComboBox;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.plaf.ComboBoxUI;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicArrowButton;
import javax.swing.plaf.basic.BasicComboBoxUI;
import javax.swing.plaf.basic.BasicComboPopup;
import javax.swing.plaf.basic.ComboPopup;
public class PopupComboSample extends JFrame...{
String labels[] = ...{ "Chardonnay", "Sauvignon", "Riesling", "Cabernet",
"Zinfandel", "Merlot", "Pinot Noir", "Sauvignon Blanc",
"Syrah", "Gewurztraminer" };
JComboBox jcb = null;
public PopupComboSample()...{
this.setTitle("下拉框向上");
this.setLayout(null);
jcb = new JComboBox(labels);
//setUI.......
jcb.setUI((ComboBoxUI) MyComboBoxUI.createUI(jcb));
jcb.setBounds(50, 150, 200, 20);
this.add(jcb, null);
setSize(300, 300);
setVisible(true);
}
public static void main(String args[]) ...{
new PopupComboSample();
}
static class MyComboBoxUI extends BasicComboBoxUI ...{
int newsBarTitleWidth = 0;
public static ComponentUI createUI(JComponent c) ...{
return new MyComboBoxUI();
}
//改变箭头的方向
protected JButton createArrowButton() ...{
JButton button = new BasicArrowButton(BasicArrowButton.NORTH);
return button;
}
//改变comboBox的弹出方向
protected ComboPopup createPopup() ...{
BasicComboPopup popup = new BasicComboPopup(comboBox)...{
public void show() ...{
//大小按需要更改
Dimension popupSize = new Dimension(200 - newsBarTitleWidth - 5, 17 * 5);
scroller.setMaximumSize(popupSize);
scroller.setPreferredSize(popupSize);
scroller.setMinimumSize(popupSize);
show(comboBox, newsBarTitleWidth, -17 * 5);//getPopupHeightForRowCount(10));
}
};
popup.getAccessibleContext().setAccessibleParent(comboBox);
return popup;
}
}
}
显示效果为:
不过看图的效果jcb的输入框没有线条显示,看来得再改改,学习中。
更多精彩
赞助商链接