📄 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 + -