?? 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>易都網(wǎng)--Java 2 圖形設(shè)計卷Ⅱ: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,網(wǎng)絡(luò)安全,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中列出的對象。圖標(biāo)和字符串按原樣顯示,而所有其他類型對象的繪制方式是:通過顯示從這些對象的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 實現(xiàn)一個定制列表單元繪制器</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 檢測列表選取的調(diào)整值</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]",
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -