JList和JCombobox组件从本质上说是类似的,它们都是提供了一系列列表数据供用户选择,从表现形式上可以把JCombobox看做一个JList和一个JTextField组成,通过callback机制回调选择项目.JList并没有复杂的UI,当然也就没有复杂的画面了,所以对于提高JList的画面表现,一般继承ListCellRenderer加入自己的表现样式就可以了,当然依照Swing的MVC原则,需要修改数据时,实现ListModel接口就可以了,对选择样式修改,实现ListSelectionModel接口就可以了,它们的实现都相对简单,功能也相对简单,一般都不需要实现,对于复杂画面样式也不推荐JList,单列的JTable和自己实现的JTree比它好很多.
JList的基本使用很简单,先看Sun官方的使用例子:
界面如下:
只需要新创建一个DefaultListModel,赋予需要显示的值就可以了.
DefaultListModel listModel =newDefaultListModel();
listModel.addElement("Debbie Scott");
listModel.addElement("Scott Hommel");
listModel.addElement("Sharon Zakhour");
然后创建JList:
JListlist=newJList(listModel);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
当然可以给它加监听:
list.addListSelectionListener(this);
也可以加鼠标的Click监听,这是所有JComponent都具有的能力.
然后实现监听就可以了:
// This method is required by
ListSelectionListener.
publicvoidvalueChanged(ListSelectionEvent e) {
if(e.getValueIsAdjusting() ==false) {
最后把创建JList放入画面上,就完成了.
Sun官方还给了一个使用JList的例子,在同一行显示多个项目:
界面如下:
创建JList的过程和前一个例子相同,只是需要继承JList把它的getScrollableUnitIncrement方法重写,变成我们自己的表现样式:
/**
* Returns the distance to scroll to expose
the next or previous
* row (for vertical scrolling) or column
(for horizontal scrolling)