?? s18.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="s17.htm">上一頁</a>][<a href="s19.htm">下一頁</a>]</p> <p align="center"><b>第18章 組合框</b></p> <p> 由JComboBox類實現的組合框是由一個可編輯區(缺省時是一個文本區)和一個可選取項的下拉列表組成的。因此,我們采取把它與JList比較的方式來介紹JComboBox.</p> <p> <b>18.1 JComboBox與JList的比較</b></p> <p> JList和ComboBox很相似,因為這兩個組件都顯示一個項列表。因此,它們都有擴展ListModel接口的模型。而且,這兩個組件都有繪制器,這些繪制器通過實現ListCellBenderer接口來繪制列表單元。<br> 但是,列表和組合框在施工方面還是有差別的。列表單是不可編輯的,但是組合框可以配備一個編輯器。JComboBox組件把編輯工作交給實現ComboBoxEdit接口的一個對象來處理。<br> 列表支持三個選取模式,并把選取工作實現ListSelectionModel接口的一個對象來處理。組合框在一個時刻只有一個可選取的項,而且選取工作由組合框模型來處理。另一方面,組合框支持鍵選取,即在某項上按下一下鍵就可以選取這個項,但列表不能這樣做。 </p> <p> 18.2 JComboBox組件</p> <p> </p> <p align="center"><b>例18-1 可編輯組合框和不可編輯組合框</b></p> <hr noshade size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import javax.swing.*; <p>public class Test extends JApplet {<br> private JCheckBox checkBox = new JCheckBox("Editable");<br> private JComboBox comboBox = new JComboBox();</p> <p> public void init() {<br> Container contentPane = getContentPane();</p> <p> comboBox.addItem("Top");<br> comboBox.addItem("Center");<br> comboBox.addItem("Bottom");</p> <p> checkBox.setSelected(comboBox.isEditable());</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(checkBox);<br> contentPane.add(comboBox);</p> <p> checkBox.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> comboBox.setEditable(checkBox.isSelected());<br> }<br> });<br> comboBox.getEditor().addActionListener(<br> new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> System.out.println("here" + <br> comboBox.getSelectedItem());<br> }<br> });<br> }<br> public static void main(String args[]) {<br> final JFrame f = new JFrame();<br> JApplet applet = new Test();</p> <p> applet.init();</p> <p> f.setContentPane(applet.getContentPane());<br> f.setBounds(100,100,308,199);<br> f.setTitle("An Application");<br> f.setVisible(true);</p> <p> f.setDefaultCloseOperation(<br> WindowConstants.DISPOSE_ON_CLOSE);</p> <p> f.addWindowListener(new WindowAdapter() {<br> public void windowClosed(WindowEvent e) {<br> System.exit(0);<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p> 18.3 組合框模型</p> <p> </p> <p> 18.3.1 JComboBoxModel</p> <p> </p> <p> 18.3.2 MutableComboBoxModel</p> <p> </p> <p> 18.3.3 DefaultComboBoxModel</p> <p> </p> <p> 18.4 組合框單繪制器</p> <p> </p> <p align="center"><b>例18-2 一個定制的列表單元繪制器</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> public void init() {<br> Container contentPane = getContentPane();<br> JComboBox combo = new JComboBox(new Object[] {<br> new Object[] { Color.gray, "gray" },<br> new Object[] { Color.orange, "orange" },<br> new Object[] { Color.red, "red" },<br> new Object[] { Color.blue, "blue" },<br> new Object[] { Color.yellow, "yellow" },<br> new Object[] { Color.magenta, "magenta" },<br> new Object[] { Color.black, "black" },<br> new Object[] { Color.green, "green" },<br> new Object[] { Color.lightGray, "lightGray"} });</p> <p> combo.setRenderer(new ColorRenderer());</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(combo);<br> }<br> }<br> class ColorRenderer extends JLabel implements ListCellRenderer {<br> private static ColorIcon icon = new ColorIcon();</p> <p> private Border <br> redBorder = BorderFactory.createLineBorder(Color.red,2),<br> emptyBorder = BorderFactory.createEmptyBorder(2,2,2,2);</p> <p> public Component getListCellRendererComponent(<br> JList list,<br> Object value,<br> int index,<br> boolean isSelected,<br> boolean cellHasFocus) {<br> Object[] array = (Object[])value;</p> <p> icon.setColor((Color)array[0]);<br> setIcon(icon);<br> setText((String)array[1]);</p> <p> if(isSelected) setBorder(redBorder);<br> else setBorder(emptyBorder);</p> <p> return this;<br> }<br> }<br> class ColorIcon implements Icon {<br> private Color color;<br> private int w, h;</p> <p> public ColorIcon() {<br> this(Color.gray, 50, 15);<br> }<br> public ColorIcon(Color color, int w, int h) {<br> this.color = color;<br> this.w = w;<br> this.h = h;<br> }<br> public void paintIcon(Component c, Graphics g, int x, int y) {<br> g.setColor(Color.black);<br> g.drawRect(x, y, w-1, h-1);<br> g.setColor(color);<br> g.fillRect(x+1, y+1, w-2, h-2);<br> }<br> public Color getColor() {<br> return color;<br> }<br> public void setColor(Color color) {<br> this.color = color;<br> }<br> public int getIconWidth() {<br> return w;<br> }<br> public int getIconHeight() {<br> return h;<br> }<br> }</p> <hr size="1" noshade> <p> 18.5 組合框鍵選取管理器</p> <p> </p> <p> 18.5.1 使用缺省鍵選取管理</p> <p> </p> <p align="center"><b>例18-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 JComboBox colorCombo = new JComboBox(new Object[] {<br> new Item(new Object[] { Color.gray, "gray" }),<br> new Item(new Object[] { Color.orange, "orange" }),<br> new Item(new Object[] { Color.red, "red" }),<br> new Item(new Object[] { Color.blue, "blue" }),<br> new Item(new Object[] { Color.yellow, "yellow" }),<br> new Item(new Object[] { Color.magenta, "magenta" }),<br> new Item(new Object[] { Color.black, "black" }),<br> new Item(new Object[] { Color.green, "green" }),<br> new Item(new Object[] { Color.lightGray, "lightGray"})<br> });</p> <p> public void init() {<br> final Container contentPane = getContentPane();</p> <p> colorCombo.setRenderer(new ColorRenderer());</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(colorCombo);</p> <p> colorCombo.addActionListener(new ActionListener(){<br> public void actionPerformed(ActionEvent e) {<br> Item item = (Item)colorCombo.getSelectedItem();<br> String first = item.toString().substring(0,1);</p> <p> showStatus("'" + first + "'" + " is for " + item);<br> }<br> });<br> }<br> }<br> class Item {<br> private Color color;<br> private String string;</p> <p> public Item(Object[] array) {<br> color = (Color)array[0];<br> string = (String)array[1];<br> }<br> public Color getColor() { return color; }<br> public String toString() { return string; }<br> }<br> class ColorRenderer extends JLabel implements ListCellRenderer {<br> private static ColorIcon icon = new ColorIcon();</p> <p> private Border <br> redBorder = BorderFactory.createLineBorder(Color.red,2),<br> emptyBorder = BorderFactory.createEmptyBorder(2,2,2,2);</p> <p> public Component getListCellRendererComponent(<br> JList list,<br> Object value,<br> int index,<br> boolean isSelected,<br> boolean cellHasFocus) {<br> Item item = (Item)value;</p> <p> icon.setColor(item.getColor());</p> <p> setIcon(icon);<br> setText(item.toString());</p> <p> if(isSelected) setBorder(redBorder);<br> else setBorder(emptyBorder);</p> <p> return this;<br> }<br> }<br> class ColorIcon implements Icon {<br> private Color color;<br> private int w, h;</p> <p> public ColorIcon() {<br> this(Color.gray, 50, 15);<br> }<br> public ColorIcon(Color color, int w, int h) {<br> this.color = color;<br> this.w = w;<br> this.h = h;<br> }<br> public void paintIcon(Component c, Graphics g, int x, int y) {<br> g.setColor(Color.black);<br> g.drawRect(x, y, w-1, h-1);<br> g.setColor(color);<br> g.fillRect(x+1, y+1, w-2, h-2);<br> }<br> public Color getColor() {<br> return color;<br> }<br> public void setColor(Color color) {<br> this.color = color;<br> }<br> public int getIconWidth() {<br> return w;<br> }<br> public int getIconHeight() {<br> return h;<br> }<br> }</p> <hr size="1" noshade> <p> 18.5.2 定制鍵選取管理器</p> <p> </p> <p align="center"><b>例18-4 實現一個定制的鍵選取管理器</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>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -