由JList类代表的Swing列表显示一个可选取对象列表,它支持三种选取模式:单选取、单间隔选取和多间隔选取。
JList类把维护和绘制列表的工作委托给一个对象来完成。一个列表的模型维护一个对象列表,列表单元绘制器将这些对象绘制在列表单元中。
缺省情况下,列表单元绘制器是DefaultListCellRenderrer的实例,它绘制表17-1中列出的对象。图标和字符串按原样显示,而所有其他类型对象的绘制方式是:通过显示从这些对象的toString返回的字符串来绘制这些对象。
构造方法
JList()
构造一个使用空模型的 JList。
JList(ListModel dataModel)
构造一个 JList,使其使用指定的非 null 模型显示元素。
JList(Object[] listData)
构造一个 JList,使其显示指定数组中的元素。
JList(Vector> listData)
构造一个 JList,使其显示指定 Vector 中的元素。
常用方法
addListSelectionListener(ListSelectionListener listener)
为每次选择发生更改时要通知的列表添加侦听器。
addSelectionInterval(int anchor, int lead)
将选择设置为指定间隔与当前选择的并集。
createSelectionModel()
返回 DefaultListSelectionModel 实例。
getCellRenderer()
返回呈现列表项的对象。
getModel()
返回保存由 JList 组件显示的项列表的数据模型。
getSelectedIndex()
返回所选的第一个索引;如果没有选择项,则返回 -1。
getSelectedValue()
返回所选的第一个值,如果选择为空,则返回 null。
getSelectionModel()
返回当前选择模型的值。
isSelectionEmpty()
如果什么也没有选择,则返回 true。
setListData(Object[] listData)
根据一个 object 数组构造 ListModel,然后对其应用 setModel。
setListData(Vector> listData)
根据 Vector 构造 ListModel,然后对其应用 setModel。
setModel(ListModel model)
设置表示列表内容或“值”的模型,并在通知 PropertyChangeListener 之后清除列表选择。
setSelectedIndex(int index)
选择单个单元。
setSelectionMode(int selectionMode)
确定允许单项选择还是多项选择。
setSelectionModel(ListSelectionModel selectionModel)
将列表的 selectionModel 设置为非 null 的 ListSelectionModel 实现。
例 1:采用数组对象创建JList并设置JList背景颜色和边框
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.border.Border;
public class JListBackground extends JPanel {
private static final Color lightBlue = new Color(153, 204, 255);
public JListBackground() {
super();
setBackground(lightBlue);
}
public static void addComponentsToPane(Container pane) {
String[] bruteForceCode = { "int count = 0",
"int m = mPattern.length();",
"int n = mSource .length();",
"outer:",
" ++count;",
" }",
" return count;",
"}"
};
JList list = new JList(bruteForceCode);
Border etch = BorderFactory.createEtchedBorder();
list.setBorder(BorderFactory.createTitledBorder(etch, "Brute Force Code"));
JPanel listPanel = new JPanel();
listPanel.add(list);
listPanel.setBackground(lightBlue);
list.setBackground(lightBlue);
pane.add(listPanel, BorderLayout.CENTER);
pane.setBackground(lightBlue);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Brute Force Algorithm");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addComponentsToPane(frame.getContentPane());
frame.pack();
frame.setSize(800, 600);
frame.setVisible(true);
}
}
例 2:采用Vector对象创建JList对象
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
public class StoringvalueinVectorandaddingthemintoJList {
public static void main(String[] a) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Vector months = new Vector();
JList list = new JList(months);
//用Vector对象创建JList,可以在创建后增加内容,而采用数组创建则不可以
months.addElement("January");
months.addElement("December");
frame.add(new JScrollPane(list));
frame.setSize(300, 200);
frame.setVisible(true);
}
}
例 3:改变JList中值
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
public class ModifyModelSampleModelAction {
static String labels[] = { "A", "B", "C", "D", "E", "F", "G" };
public static void main(String args[]) {
JFrame frame = new JFrame("Modifying Model");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Fill model
final DefaultListModel model = new Defau