📄 s18.htm
字号:
import javax.swing.event.*;<br> import javax.swing.border.*; <p>public class Test extends JApplet {<br> private JComboBox comboBox = <br> 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> new Item(new Object[] {Color.white, "white"}),<br> });</p> <p> public void init() {<br> Container contentPane = getContentPane();</p> <p> comboBox.setRenderer(new ColorRendererer());<br> comboBox.setEditor(new ColorComboBoxEditor());<br> comboBox.setEditable(true);</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(comboBox);<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 ColorComboBoxEditor extends AbstractComboBoxEditor {<br> ColorIcon editorIcon = new ColorIcon();<br> JLabel editorLabel = new JLabel(editorIcon);</p> <p> Item item;</p> <p> JColorChooser colorChooser = new JColorChooser();<br> ActionListener okListener = new OKListener();<br> Dialog dialog = JColorChooser.createDialog(<br> null, // parentComponent<br> "Choose A Color",// title<br> true, // modal<br> colorChooser,<br> okListener, <br> null); // cancel listener</p> <p> public ColorComboBoxEditor() {<br> editorLabel.setBorder(BorderFactory.createEtchedBorder());</p> <p> editorLabel.addMouseListener(new MouseAdapter() {<br> public void mousePressed(MouseEvent e) {<br> dialog.setVisible(true);<br> }<br> });<br> }<br> class OKListener implements ActionListener {<br> public void actionPerformed(ActionEvent e) {<br> item = <br> new Item(new Object[] {<br> colorChooser.getColor(), null});</p> <p> fireActionPerformed(e);<br> }<br> }<br> public Component getEditorComponent() {<br> return editorLabel;<br> }<br> public Object getItem() {<br> return item;<br> }<br> public void setItem(Object itemToSet) {<br> item = (Item)itemToSet;</p> <p> // cannot set the selected item in an editor's<br> // setItem method, or an infinite loop results</p> <p> editorIcon.setColor(item.getColor());<br> editorLabel.setText(item.toString());<br> }<br> public void selectAll() {<br> // from ComboBoxModel interface: nothing to select <br> }<br> }<br> abstract class AbstractComboBoxEditor implements ComboBoxEditor {<br> EventListenerList listenerList = new EventListenerList();</p> <p> public void addActionListener(ActionListener listener) {<br> listenerList.add(ActionListener.class, listener);<br> }<br> public void removeActionListener(ActionListener listener) {<br> listenerList.remove(ActionListener.class, listener);<br> }<br> protected void fireActionPerformed(ActionEvent e) {<br> // Guaranteed to return a non-null array<br> Object[] listeners = listenerList.getListenerList();<br> <br> // Process the listeners last to first, notifying<br> // those that are interested in this event<br> for (int i = listeners.length-2; i>=0; i-=2) {<br> if (listeners[i]==ActionListener.class) {<br> ((ActionListener)<br> listeners[i+1]).actionPerformed(e);<br> } <br> }<br> } <br> }<br> class ColorRendererer extends JLabel implements ListCellRenderer {<br> private ColorIcon icon = new ColorIcon();</p> <p> public ColorRendererer() {<br> setOpaque(true);<br> setIcon(icon);<br> }<br> 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());<br> setText(item.toString());</p> <p> if(isSelected) {<br> setForeground(list.getSelectionForeground());<br> setBackground(list.getSelectionBackground());<br> }<br> else {<br> setForeground(list.getForeground());<br> setBackground(list.getBackground());<br> }<br> 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.6.1 JComboBox属性</p> <p> </p> <p align="center"> </p> <p> 18.6.2 JComboBox事件</p> <p> </p> <p align="center"><b>例18-7 处理选取事件</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 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> contentPane.setLayout(new FlowLayout());<br> contentPane.add(comboBox);</p> <p> comboBox.addItemListener(new ItemListener() { <br> public void itemStateChanged(ItemEvent event) {<br> int state = event.getStateChange();<br> String item = (String)event.getItem(), s;</p> <p> if(event.getStateChange() == ItemEvent.SELECTED)<br> s = " selected";<br> else<br> s = " deselected";</p> <p> JOptionPane.showMessageDialog(<br> comboBox, // parent component<br> item + s, // message<br> "JComboBox Selection", // title<br> JOptionPane.INFORMATION_MESSAGE); // type<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p align="center"><b>例18-8 处理编辑事件</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 JComboBox comboBox = new JComboBox();<br> private ComboBoxEditor editor = comboBox.getEditor();</p> <p> public void init() {<br> Container contentPane = getContentPane();</p> <p> comboBox.setEditable(true);</p> <p> comboBox.addItem("Top");<br> comboBox.addItem("Center");<br> comboBox.addItem("Bottom");</p> <p> contentPane.setLayout(new FlowLayout());<br> contentPane.add(comboBox);</p> <p> editor.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> String s = (String)editor.getItem();<br> showStatus("Item Edited: " + s);<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p> </p> <p> 18.6.3 JComboBox类总结</p> <p> </p> <p align="center"><b>例18-9 手工显示一个组件框的弹出式菜单</b></p> <hr noshade size="1"> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> public void init() {<br> Container contentPane = getContentPane();<br> JButton button = new JButton("show popup");<br> final JComboBox combo = new JComboBox();</p> <p> combo.addItem("first item");<br> combo.addItem("second item");<br> combo.addItem("third item");<br> combo.addItem("fourth item");<br> combo.addItem("fifth item");</p> <p> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> combo.showPopup();<br> }<br> });<br> contentPane.setLayout(new FlowLayout());<br> contentPane.add(button);<br> contentPane.add(combo);<br> }<br> }</p> <hr size="1" noshade> <p>18.6.4 AWT兼容</p> <p> </p> <p> 18.7 本章回顾</p> <p> </p> <p>[<a href="index.html" target="_self">目录</a>][<a href="s17.htm">上一页</a>][<a href="s19.htm">下一页</a>](飒龙收藏/2002.5.18) </p> </td> </tr> </tbody> </table> </td> </tr></tbody></table><script language="javascript">bottomprint()</script></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -