《Java2图形设计卷II:Swing》配套光盘源码

源代码在线查看: test.java

软件大小: 4504 K
上传用户: guigong
关键词: Java2 Swing 图形 光盘
下载地址: 免注册下载 普通下载 VIP

相关代码

				import java.awt.*;
				import java.awt.event.*;
				import javax.swing.*;
				import javax.swing.border.*;
				
				public class Test extends JApplet {
					private ColorKeySelectionManager ksm = 
												   new ColorKeySelectionManager();
				
					private JComboBox colorCombo = new JComboBox(new Object[] {
							new Item(new Object[] { Color.gray, "gray" }),
							new Item(new Object[] { Color.orange, "orange" }),
							new Item(new Object[] { Color.red, "red" }),
							new Item(new Object[] { Color.blue, "blue" }),
							new Item(new Object[] { Color.yellow, "yellow" }),
							new Item(new Object[] { Color.magenta, "magenta" }),
							new Item(new Object[] { Color.black, "black" }),
							new Item(new Object[] { Color.green, "green" }),
							new Item(new Object[] { Color.lightGray, "lightGray"})
					});
					public void init() {
						final Container contentPane = getContentPane();
				
						colorCombo.setRenderer(new ColorRenderer());
						colorCombo.setKeySelectionManager(ksm);
				
						contentPane.setLayout(new FlowLayout());
						contentPane.add(colorCombo);
				
						colorCombo.addActionListener(new ActionListener(){
							public void actionPerformed(ActionEvent e) {
								Item item = (Item)colorCombo.getSelectedItem();
								String itemString = item.toString();
				
								showStatus("'" + ksm.getSearchString() +
										   "'" + " is for " + itemString);
							}
						});
					}
				}
				class Item {
					private Color color;
					private String string;
				
					public Item(Object[] array) {
						color = (Color)array[0];
						string = (String)array[1];
					}
					public Color getColor() { return color; }
					public String toString() { return string; }
				}
				class ColorRenderer extends JLabel implements ListCellRenderer {
					private static ColorIcon icon = new ColorIcon();
				
					private Border 
						redBorder = BorderFactory.createLineBorder(Color.red,2),
						emptyBorder = BorderFactory.createEmptyBorder(2,2,2,2);
				
					public Component getListCellRendererComponent(
													JList list,
													Object value,
													int index,
													boolean isSelected,
													boolean cellHasFocus) {
						Item item = (Item)value;
				
						icon.setColor(item.getColor());
						setIcon(icon);
						setText(item.toString());
				
						if(isSelected) setBorder(redBorder);
						else 		   setBorder(emptyBorder);
				
						return this;
					}
				}
				class ColorIcon implements Icon {
					private Color color;
					private int w, h;
				
					public ColorIcon() {
						this(Color.gray, 50, 15);
					}
					public ColorIcon(Color color, int w, int h) {
						this.color = color;
						this.w = w;
						this.h = h;
					}
					public void paintIcon(Component c, Graphics g, int x, int y) {
						g.setColor(Color.black);
						g.drawRect(x, y, w-1, h-1);
						g.setColor(color);
						g.fillRect(x+1, y+1, w-2, h-2);
					}
					public Color getColor() {
						return color;
					}
					public void setColor(Color color) {
						this.color = color;
					}
					public int getIconWidth() {
						return w;
					}
					public int getIconHeight() {
						return h;
					}
				}
				class ColorKeySelectionManager 
								implements JComboBox.KeySelectionManager {
					private String searchString = new String();
					private long lastTime;
				
					public int selectionForKey(char key,ComboBoxModel model) {
						updateSearchString(model, key);
				
						int start = getIndexAfter(model,getSelectedString(model));
						int selection = search(model, start);
				
						if(selection == -1 && start != 0)
							selection = search(model, 0);
				
						return selection;
					}
					public String getSearchString() {
						return searchString;
					}
					private int search(ComboBoxModel model, int start) {
						for(int i=start; i < model.getSize(); ++i) {
							String s = getString(model, i);
							int searchLength = searchString.length();
				
							if(s.regionMatches(0,searchString,0,searchLength))
								return i;
						}
						return -1;
					}
					private int getIndexAfter(ComboBoxModel model, String find) {
						int size = model.getSize();
				
						if(find != null) {
							for(int i=0; i < size; ++i) {
								String s = getString(model, i);
				
								if(s.compareToIgnoreCase(find) == 0) {
									return (i == size-1) ? 0 : i + 1;
								}
							}
						}
						return 0;
					}
					private String getString(ComboBoxModel model, int index) {
						Item item = (Item)model.getElementAt(index);
						return item.toString();
					}
					private String getSelectedString(ComboBoxModel model) {
						Item item = (Item)model.getSelectedItem();
						return item.toString();
					}
					private void updateSearchString(
												ComboBoxModel model, char key) {
						long time = System.currentTimeMillis();
				
						if(time - lastTime < 500) searchString += key;
						else 	   				  searchString = "" + key;
				
						lastTime = time;
					}
				}
							

相关资源