?? optiondialogtreecellrenderer.java
字號:
package wapide;import javax.swing.*;import javax.swing.plaf.ColorUIResource;import javax.swing.plaf.FontUIResource;import java.awt.*;import java.awt.event.*;import java.beans.*;import java.io.*;import java.util.*;import javax.swing.tree.*;/** * This class was taken from the source code of Java, provided by Sun Microsystems. * It was distributed as part of the Java 1.3 SDK. It has been slightly modified * by Mark Busman for use with the WAP.CardLevelTagsDesigner class so that * it will display the appropriate icon based on the control type of any * given item. The only procedure modified was getTreeCellRendererComponent() and the * constructor. */public class OptionDialogTreeCellRenderer extends JLabel implements TreeCellRenderer{ /** Is the value currently selected. */ protected boolean selected; /** True if has focus. */ protected boolean hasFocus; /** True if draws focus border around icon as well. */ private boolean drawsFocusBorderAroundIcon; // Icons /** Icon used to show non-leaf nodes that aren't expanded. */ transient protected Icon closedIcon; /** Icon used to show leaf nodes. */ transient protected Icon leafIcon; /** Icon used to show non-leaf nodes that are expanded. */ transient protected Icon openIcon; // Colors /** Color to use for the foreground for selected nodes. */ protected Color textSelectionColor; /** Color to use for the foreground for non-selected nodes. */ protected Color textNonSelectionColor; /** Color to use for the background when a node is selected. */ protected Color backgroundSelectionColor; /** Color to use for the background when the node isn't selected. */ protected Color backgroundNonSelectionColor; /** Color to use for the background when the node isn't selected. */ protected Color borderSelectionColor; /** * Returns a new instance of DefaultTreeCellRenderer. Alignment is * set to left aligned. Icons and text color are determined from the * UIManager. */ public OptionDialogTreeCellRenderer() { setHorizontalAlignment(JLabel.LEFT); setLeafIcon(new ImageIcon(wapide.IDEFrame.class.getResource("optionTag.gif"))); setClosedIcon(new ImageIcon(wapide.IDEFrame.class.getResource("optgroupTag.gif"))); setOpenIcon(new ImageIcon(wapide.IDEFrame.class.getResource("optgroupColorTag.gif"))); setTextSelectionColor(UIManager.getColor("Tree.selectionForeground")); setTextNonSelectionColor(UIManager.getColor("Tree.textForeground")); setBackgroundSelectionColor(UIManager.getColor("Tree.selectionBackground")); setBackgroundNonSelectionColor(UIManager.getColor("Tree.textBackground")); setBorderSelectionColor(UIManager.getColor("Tree.selectionBorderColor")); Object value = UIManager.get("Tree.drawsFocusBorderAroundIcon"); drawsFocusBorderAroundIcon = (value != null && ((Boolean)value). booleanValue()); } /** * Returns the default icon, for the current laf, that is used to * represent non-leaf nodes that are expanded. */ private Icon getDefaultOpenIcon() { return UIManager.getIcon("Tree.openIcon"); } /** * Returns the default icon, for the current laf, that is used to * represent non-leaf nodes that are not expanded. */ private Icon getDefaultClosedIcon() { return UIManager.getIcon("Tree.closedIcon"); } /** * Returns the default icon, for the current laf, that is used to * represent leaf nodes. */ private Icon getDefaultLeafIcon() { return UIManager.getIcon("Tree.leafIcon"); } /** * Sets the icon used to represent non-leaf nodes that are expanded. */ private void setOpenIcon(Icon newIcon) { openIcon = newIcon; } /** * Returns the icon used to represent non-leaf nodes that are expanded. */ private Icon getOpenIcon() { return openIcon; } /** * Sets the icon used to represent non-leaf nodes that are not expanded. */ private void setClosedIcon(Icon newIcon) { closedIcon = newIcon; } /** * Returns the icon used to represent non-leaf nodes that are not * expanded. */ private Icon getClosedIcon() { return closedIcon; } /** * Sets the icon used to represent leaf nodes. */ private void setLeafIcon(Icon newIcon) { leafIcon = newIcon; } /** * Returns the icon used to represent leaf nodes. */ private Icon getLeafIcon() { return leafIcon; } /** * Sets the color the text is drawn with when the node is selected. */ public void setTextSelectionColor(Color newColor) { textSelectionColor = newColor; } /** * Returns the color the text is drawn with when the node is selected. */ public Color getTextSelectionColor() { return textSelectionColor; } /** * Sets the color the text is drawn with when the node isn't selected. */ public void setTextNonSelectionColor(Color newColor) { textNonSelectionColor = newColor; } /** * Returns the color the text is drawn with when the node isn't selected. */ public Color getTextNonSelectionColor() { return textNonSelectionColor; } /** * Sets the color to use for the background if node is selected. */ public void setBackgroundSelectionColor(Color newColor) { backgroundSelectionColor = newColor; } /** * Returns the color to use for the background if node is selected. */ public Color getBackgroundSelectionColor() { return backgroundSelectionColor; } /** * Sets the background color to be used for non selected nodes. */ public void setBackgroundNonSelectionColor(Color newColor) { backgroundNonSelectionColor = newColor; } /** * Returns the background color to be used for non selected nodes. */ public Color getBackgroundNonSelectionColor() { return backgroundNonSelectionColor; } /** * Sets the color to use for the border. */ public void setBorderSelectionColor(Color newColor) { borderSelectionColor = newColor; } /** * Returns the color the border is drawn. */ public Color getBorderSelectionColor() { return borderSelectionColor; } /** * Subclassed to map <code>FontUIResource</code>s to null. If * <code>font</code> is null, or a <code>FontUIResource</code>, this * has the effect of letting the font of the JTree show * through. On the other hand, if <code>font</code> is non-null, and not * a <code>FontUIResource</code>, the font becomes <code>font</code>. */ public void setFont(Font font) { if(font instanceof FontUIResource) font = null; super.setFont(font); } /** * Subclassed to map <code>ColorUIResource</code>s to null. If * <code>color</code> is null, or a <code>ColorUIResource</code>, this * has the effect of letting the background color of the JTree show * through. On the other hand, if <code>color</code> is non-null, and not * a <code>ColorUIResource</code>, the background becomes * <code>color</code>. */ public void setBackground(Color color) { if(color instanceof ColorUIResource) color = null; super.setBackground(color); } /** * Configures the renderer based on the passed in components. * The value is set from messaging the tree with * <code>convertValueToText</code>, which ultimately invokes * <code>toString</code> on <code>value</code>. * The foreground color is set based on the selection and the icon * is set based on on leaf and expanded. */ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { String stringValue = tree.convertValueToText(value, sel, expanded, leaf, row, hasFocus); try { //boolean allowschildren = true; DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; boolean allowschildren = node.getAllowsChildren(); this.hasFocus = hasFocus; setText(stringValue); if(sel) setForeground(getTextSelectionColor()); else setForeground(getTextNonSelectionColor()); setEnabled(true); if (allowschildren) setIcon(getOpenIcon()); else setIcon(getLeafIcon()); if (expanded) { if (allowschildren) setIcon(getOpenIcon()); else setIcon(getLeafIcon()); } else { if (allowschildren) setIcon(getClosedIcon()); else setIcon(getLeafIcon()); } setComponentOrientation(tree.getComponentOrientation()); selected = sel; } catch (NullPointerException nullerr) {} return this; } /** * Paints the value. The background is filled based on selected. */ public void paint(Graphics g) { Color bColor; if(selected) { bColor = getBackgroundSelectionColor(); } else { bColor = getBackgroundNonSelectionColor(); if(bColor == null) bColor = getBackground(); } int imageOffset = -1; if(bColor != null) { Icon currentI = getIcon(); imageOffset = getLabelStart(); g.setColor(bColor); if(getComponentOrientation().isLeftToRight()) { g.fillRect(imageOffset, 0, getWidth() - 1 - imageOffset, getHeight()); } else { g.fillRect(0, 0, getWidth() - 1 - imageOffset, getHeight()); } } if (hasFocus) { if (drawsFocusBorderAroundIcon) { imageOffset = 0; } else if (imageOffset == -1) { imageOffset = getLabelStart(); } Color bsColor = getBorderSelectionColor(); if (bsColor != null) { g.setColor(bsColor); if(getComponentOrientation().isLeftToRight()) { g.drawRect(imageOffset, 0, getWidth() - 1 - imageOffset, getHeight() - 1); } else { g.drawRect(0, 0, getWidth() - 1 - imageOffset, getHeight() - 1); } } } super.paint(g); } private int getLabelStart() { Icon currentI = getIcon(); if(currentI != null && getText() != null) { return currentI.getIconWidth() + Math.max(0, getIconTextGap() - 1); } return 0; } /** * Overrides <code>JComponent.getPreferredSize</code> to * return slightly wider preferred size value. */ public Dimension getPreferredSize() { Dimension retDimension = super.getPreferredSize(); if(retDimension != null) retDimension = new Dimension(retDimension.width + 3, retDimension.height); return retDimension; } /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void validate() {} /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void revalidate() {} /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void repaint(long tm, int x, int y, int width, int height) {} /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void repaint(Rectangle r) {} /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { // Strings get interned... if (propertyName=="text") super.firePropertyChange(propertyName, oldValue, newValue); } /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void firePropertyChange(String propertyName, byte oldValue, byte newValue) {} /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void firePropertyChange(String propertyName, char oldValue, char newValue) {} /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void firePropertyChange(String propertyName, short oldValue, short newValue) {} /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void firePropertyChange(String propertyName, int oldValue, int newValue) {} /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void firePropertyChange(String propertyName, long oldValue, long newValue) {} /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void firePropertyChange(String propertyName, float oldValue, float newValue) {} /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void firePropertyChange(String propertyName, double oldValue, double newValue) {} /** * Overridden for performance reasons. * See the <a href="#override">Implementation Note</a> * for more information. */ public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {}}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -