📄 s17.htm
字号:
<SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up.js"></SCRIPT><SCRIPT LANGUAGE="JavaScript" SRC="/-fs0/sys/pop-up-all.js"></SCRIPT><html><head><title>易都网--Java 2 图形设计卷Ⅱ:SWING</title><LINK rel="stylesheet" href="../../../_public/javaa.css"><meta http-equiv="Content-Type" content="text/html; charset=GBK"><script language="JavaScript" src="../../../_public/javaa.js"></script><meta name="keywords" content="Java,JSP,ASP,PHP,J2EE,EJB,JavaScript,C/C++,ASM,CSS,HTML,XML,网络安全,MySQL,ACCESS"></head><body bgcolor="#FFFFFF"><table border=0 cellpadding=0 cellspacing=0 width="100%"> <tbody> <script language="javascript">print2()</script> <tr> <td width="100%"> <table bgcolor=#EEEEEE border=0 cellpadding=3 cellspacing=0 width="100%"> <tbody> <tr> <td class=f1 id=thetd width="100%"> <p>[<a href="index.html" target="_self">目录</a>][<a href="s16.htm">上一页</a>][<a href="s18.htm">下一页</a>]</p> <p align="center"> <b>第17章 列表</b></p> <p> 由JList类代表的Swing列表显示一个可选取对象列表,它支持三种选取模式:单选取、单间隔选取和多间隔选取。<br> JList类把维护和绘制列表的工作委托给一个对象来完成。一个列表的模型维护一个对象列表,列表单元绘制器将这些对象绘制在列表单元中。<br> 缺省情况下,列表单元绘制器是DefaultListCellRenderrer的实例,它绘制表17-1中列出的对象。图标和字符串按原样显示,而所有其他类型对象的绘制方式是:通过显示从这些对象的toString返回的字符串来绘制这些对象。 </p> <p align="center"><b>例 17-1 一个简单的列表样例</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.event.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> public void init() {<br> Container contentPane = getContentPane();<br> Object[] items = { "item one", "item two", "item three", <br> "item four", "item five", "item six",<br> "item seven", "item eight", <br> "item nine", "item ten" };</p> <p> JList list = new JList(items);<br> JScrollPane sp = new JScrollPane(list);</p> <p> list.setVisibleRowCount(7);</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(sp);<br> }<br> }</p> <hr size="1" noshade> <p> 17.1 列表模型</p> <p> </p> <p align="center"><b>例 17-2 一个带有缺省列表模型的列表</b></p> <hr noshade size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import javax.swing.*;<br> import javax.swing.event.*; <p>public class Test extends JApplet {<br> private JList list = new JList();</p> <p> String[] items = { "item[0]", "item[1]", "item[2]", <br> "item[3]", "item[4]", "item[5]",<br> "item[6]", "item[7]", <br> "item[8]", "item[9]" };</p> <p> public void init() {<br> Container contentPane = getContentPane();<br> JPanel controlPanel = new ControlPanel(list);</p> <p> contentPane.add(controlPanel, BorderLayout.NORTH);<br> contentPane.add(new JScrollPane(list), <br> BorderLayout.CENTER);<br> populateList();<br> }<br> public void populateList() {<br> DefaultListModel model = new DefaultListModel();</p> <p> for(int i=0; i < items.length; ++i)<br> model.addElement(items[i]);</p> <p> list.setModel(model);<br> }<br> }<br> class ControlPanel extends JPanel {<br> JButton remove = new JButton("remove selected items");<br> JButton add = new JButton("add item");</p> <p> public ControlPanel(final JList list) {<br> add(remove);<br> add(add);</p> <p> remove.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> int[] selected = list.getSelectedIndices();<br> DefaultListModel model =<br> (DefaultListModel)list.getModel();</p> <p> for(int i=0; i < selected.length; ++i) {<br> model.removeElementAt(selected[i] - i);<br> }<br> }<br> });<br> add.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> final DefaultListModel model = <br> (DefaultListModel)list.getModel();</p> <p> String s = JOptionPane.showInputDialog(<br> list,<br> "Enter item text:");</p> <p> model.addElement(s);</p> <p> SwingUtilities.invokeLater(new Runnable() {<br> public void run() {<br> list.ensureIndexIsVisible(<br> model.getSize()-1);<br> }<br> });<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p> 17.1.1 AbstractListModel</p> <p> </p> <p> 17.1.2 DefaultListModel</p> <p> </p> <p> 17.2 列表选取</p> <p> </p> <p> 17.3 列表单绘制器</p> <p> </p> <p align="center"><b>例17-3 实现一个定制列表单元绘制器</b></p> <hr noshade size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import javax.swing.*;<br> import javax.swing.border.*; <p>public class Test extends JApplet {<br> private String[] names = new String[] {<br> "baseball player", "basketball player",<br> "beach player", "chef",<br> "hockey player", "software developer",<br> "construction worker", "martial artist",<br> "soccer", "movie star"<br> };<br> private String[] pics = new String[] {<br> "baseball.gif", "basketball.gif",<br> "beach_umbrella.gif", "dining.gif",<br> "hockey.gif", "mad_hacker.gif",<br> "men_at_work.gif", "punch.gif",<br> "soccer.gif", "filmstrip.gif" <br> };</p> <p> public void init() {<br> Container contentPane = getContentPane();<br> ListModel model = <br> new NameAndPictureListModel(names, pics);</p> <p> ListCellRenderer renderer = <br> new NameAndPictureListCellRenderer();</p> <p> JList list = new JList(model);</p> <p> list.setCellRenderer(renderer);<br> list.setVisibleRowCount(5);</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(new JScrollPane(list));<br> }<br> }<br> class NameAndPictureListModel extends DefaultListModel {<br> public NameAndPictureListModel(String[] names,String[] pics) {<br> for(int i=0; i < names.length; ++i) {<br> addElement(new Object[] { <br> names[i], new ImageIcon(pics[i]) } );<br> }<br> }<br> public String getName(Object object) {<br> Object[] array = (Object[])object;<br> return (String)array[0];<br> }<br> public Icon getIcon(Object object) {<br> Object[] array = (Object[])object;<br> return (Icon)array[1];<br> }<br> }<br> class NameAndPictureListCellRenderer extends JLabel <br> implements ListCellRenderer {<br> private Border <br> lineBorder = BorderFactory.createLineBorder(Color.red, 2),<br> emptyBorder = BorderFactory.createEmptyBorder(2,2,2,2);</p> <p> public NameAndPictureListCellRenderer() {<br> setOpaque(true);<br> }<br> public Component getListCellRendererComponent(<br> JList list,<br> Object value,<br> int index,<br> boolean isSelected,<br> boolean cellHasFocus) {<br> NameAndPictureListModel model = <br> (NameAndPictureListModel)list.getModel();</p> <p> setText(model.getName(value));<br> setIcon(model.getIcon(value));</p> <p> if(isSelected) {<br> setForeground(list.getSelectionForeground());<br> setBackground(list.getSelectionBackground());<br> }<br> else {<br> setForeground(list.getForeground());<br> setBackground(list.getBackground());<br> }</p> <p> if(cellHasFocus) setBorder(lineBorder);<br> else setBorder(emptyBorder);</p> <p> return this;<br> }<br> }</p> <hr size="1" noshade> <p> 17.3.1 JList属性</p> <p> </p> <p> 17.3.2 JList事件</p> <p> </p> <p align="center"><b>例17-4 检测列表选取的调整值</b></p> <hr noshade size="1"> import java.awt.*;<br> import javax.swing.*;<br> import javax.swing.event.*; <p>public class Test extends JApplet {<br> public void init() {<br> Container contentPane = getContentPane();</p> <p> String[] items = { "item[0]", "item[1]", "item[2]", <br> "item[3]", "item[4]", "item[5]",<br> "item[6]", "item[7]", <br> "item[8]", "item[9]" };</p> <p> JList list = new JList(items);</p> <p> contentPane.add(new JScrollPane(list), <br> BorderLayout.CENTER);</p> <p> list.addListSelectionListener(<br> new ListSelectionListener() {<br> public void valueChanged(ListSelectionEvent e) {<br> String s;</p> <p> if(e.getValueIsAdjusting()) {<br> s = "adjusting selection ...";<br> }<br> else {<br> s = "selection from " + e.getFirstIndex() + <br> " to " + e.getLastIndex();<br> }<br> showStatus(s);<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p align="center"><b>例17-5 处理列表选取事件</b></p> <hr noshade size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import javax.swing.*;<br> import javax.swing.event.*; <p>public class Test extends JApplet {<br> private ControlPanel controlPanel;</p> <p> public void init() {<br> Container contentPane = getContentPane();<br> JPanel listPanel = new JPanel();</p> <p> String[] items = { "item[0]", "item[1]", "item[2]",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -