📄 metaliconfactory.java
字号:
g.drawLine(4,6, 4,6); // middle disk g.drawLine(2,7, 3,7); g.drawLine(2,8, 3,8); g.drawLine(4,9, 4,9); // bottom disk g.drawLine(2,10, 3,10); g.drawLine(2,11, 3,11); g.drawLine(4,12, 4,12); g.translate(-x, -y); } public int getIconWidth() { return 16; } public int getIconHeight() { return 16; } } // End class TreeHardDriveIcon // Tree FloppyDrive Icon code private static class TreeFloppyDriveIcon implements Icon, UIResource, Serializable { public void paintIcon(Component c, Graphics g, int x, int y) { g.translate(x, y); // Fill body of floppy g.setColor(MetalLookAndFeel.getPrimaryControl()); g.fillRect(2,2, 12,12); // Draw outside edge of floppy g.setColor(MetalLookAndFeel.getPrimaryControlInfo()); g.drawLine( 1, 1, 13, 1); // top g.drawLine(14, 2, 14,14); // right g.drawLine( 1,14, 14,14); // bottom g.drawLine( 1, 1, 1,14); // left // Draw grey-ish highlights g.setColor(MetalLookAndFeel.getControlDarkShadow()); g.fillRect(5,2, 6,5); // metal disk protector part g.drawLine(4,8, 11,8); // top of label g.drawLine(3,9, 3,13); // left of label g.drawLine(12,9, 12,13); // right of label // Draw label and exposed disk g.setColor(MetalLookAndFeel.getPrimaryControlHighlight()); g.fillRect(8,3, 2,3); // exposed disk g.fillRect(4,9, 8,5); // label // Draw text on label g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); g.drawLine(5,10, 9,10); g.drawLine(5,12, 8,12); g.translate(-x, -y); } public int getIconWidth() { return 16; } public int getIconHeight() { return 16; } } // End class TreeFloppyDriveIcon static private final Dimension folderIcon16Size = new Dimension( 16, 16 ); /** * Utility class for caching icon images. This is necessary because * we need a new image whenever we are rendering into a new * GraphicsConfiguration, but we do not want to keep recreating icon * images for GC's that we have already seen (for example, * dragging a window back and forth between monitors on a multimon * system, or drawing an icon to different Components that have different * GC's). * So now whenever we create a new icon image for a given GC, we * cache that image with the GC for later retrieval. */ static class ImageCacher { Vector images = new Vector(1, 1); ImageGcPair currentImageGcPair; class ImageGcPair { Image image; GraphicsConfiguration gc; ImageGcPair(Image image, GraphicsConfiguration gc) { this.image = image; this.gc = gc; } boolean hasSameConfiguration(GraphicsConfiguration newGC) { if (((newGC != null) && (newGC.equals(gc))) || ((newGC == null) && (gc == null))) { return true; } return false; } } Image getImage(GraphicsConfiguration newGC) { if ((currentImageGcPair == null) || !(currentImageGcPair.hasSameConfiguration(newGC))) { Enumeration elements = images.elements(); while (elements.hasMoreElements()) { ImageGcPair imgGcPair = (ImageGcPair)elements.nextElement(); if (imgGcPair.hasSameConfiguration(newGC)) { currentImageGcPair = imgGcPair; return imgGcPair.image; } } return null; } return currentImageGcPair.image; } void cacheImage(Image image, GraphicsConfiguration gc) { ImageGcPair imgGcPair = new ImageGcPair(image, gc); images.addElement(imgGcPair); currentImageGcPair = imgGcPair; } } /** * <p> * <strong>Warning:</strong> * Serialized objects of this class will not be compatible with * future Swing releases. The current serialization support is * appropriate for short term storage or RMI between applications running * the same version of Swing. As of 1.4, support for long term storage * of all JavaBeans<sup><font size="-2">TM</font></sup> * has been added to the <code>java.beans</code> package. * Please see {@link java.beans.XMLEncoder}. */ public static class FolderIcon16 implements Icon, Serializable { ImageCacher imageCacher; public void paintIcon(Component c, Graphics g, int x, int y) { GraphicsConfiguration gc = c.getGraphicsConfiguration(); if (imageCacher == null) { imageCacher = new ImageCacher(); } Image image = imageCacher.getImage(gc); if (image == null) { if (gc != null) { image = gc.createCompatibleImage(getIconWidth(), getIconHeight(), Transparency.BITMASK); } else { image = new BufferedImage(getIconWidth(), getIconHeight(), BufferedImage.TYPE_INT_ARGB); } Graphics imageG = image.getGraphics(); paintMe(c,imageG); imageG.dispose(); imageCacher.cacheImage(image, gc); } g.drawImage(image, x, y+getShift(), null); } private void paintMe(Component c, Graphics g) { int right = folderIcon16Size.width - 1; int bottom = folderIcon16Size.height - 1; // Draw tab top g.setColor( MetalLookAndFeel.getPrimaryControlDarkShadow() ); g.drawLine( right - 5, 3, right, 3 ); g.drawLine( right - 6, 4, right, 4 ); // Draw folder front g.setColor( MetalLookAndFeel.getPrimaryControl() ); g.fillRect( 2, 7, 13, 8 ); // Draw tab bottom g.setColor( MetalLookAndFeel.getPrimaryControlShadow() ); g.drawLine( right - 6, 5, right - 1, 5 ); // Draw outline g.setColor( MetalLookAndFeel.getPrimaryControlInfo() ); g.drawLine( 0, 6, 0, bottom ); // left side g.drawLine( 1, 5, right - 7, 5 ); // first part of top g.drawLine( right - 6, 6, right - 1, 6 ); // second part of top g.drawLine( right, 5, right, bottom ); // right side g.drawLine( 0, bottom, right, bottom ); // bottom // Draw highlight g.setColor( MetalLookAndFeel.getPrimaryControlHighlight() ); g.drawLine( 1, 6, 1, bottom - 1 ); g.drawLine( 1, 6, right - 7, 6 ); g.drawLine( right - 6, 7, right - 1, 7 ); } public int getShift() { return 0; } public int getAdditionalHeight() { return 0; } public int getIconWidth() { return folderIcon16Size.width; } public int getIconHeight() { return folderIcon16Size.height + getAdditionalHeight(); } } /** * <p> * <strong>Warning:</strong> * Serialized objects of this class will not be compatible with * future Swing releases. The current serialization support is * appropriate for short term storage or RMI between applications running * the same version of Swing. As of 1.4, support for long term storage * of all JavaBeans<sup><font size="-2">TM</font></sup> * has been added to the <code>java.beans</code> package. * Please see {@link java.beans.XMLEncoder}. */ public static class TreeFolderIcon extends FolderIcon16 { public int getShift() { return -1; } public int getAdditionalHeight() { return 2; } } static private final Dimension fileIcon16Size = new Dimension( 16, 16 ); /** * <p> * <strong>Warning:</strong> * Serialized objects of this class will not be compatible with * future Swing releases. The current serialization support is * appropriate for short term storage or RMI between applications running * the same version of Swing. As of 1.4, support for long term storage * of all JavaBeans<sup><font size="-2">TM</font></sup> * has been added to the <code>java.beans</code> package. * Please see {@link java.beans.XMLEncoder}. */ public static class FileIcon16 implements Icon, Serializable { ImageCacher imageCacher; public void paintIcon(Component c, Graphics g, int x, int y) { GraphicsConfiguration gc = c.getGraphicsConfiguration(); if (imageCacher == null) { imageCacher = new ImageCacher(); } Image image = imageCacher.getImage(gc); if (image == null) { if (gc != null) { image = gc.createCompatibleImage(getIconWidth(), getIconHeight(), Transparency.BITMASK); } else { image = new BufferedImage(getIconWidth(), getIconHeight(), BufferedImage.TYPE_INT_ARGB); } Graphics imageG = image.getGraphics(); paintMe(c,imageG); imageG.dispose(); imageCacher.cacheImage(image, gc); } g.drawImage(image, x, y+getShift(), null); } private void paintMe(Component c, Graphics g) { int right = fileIcon16Size.width - 1; int bottom = fileIcon16Size.height - 1; // Draw fill g.setColor( MetalLookAndFeel.getWindowBackground() ); g.fillRect( 4, 2, 9, 12 ); // Draw frame g.setColor( MetalLookAndFeel.getPrimaryControlInfo() ); g.drawLine( 2, 0, 2, bottom ); // left g.drawLine( 2, 0, right - 4, 0 ); // top g.drawLine( 2, bottom, right - 1, bottom ); // bottom g.drawLine( right - 1, 6, right - 1, bottom ); // right g.drawLine( right - 6, 2, right - 2, 6 ); // slant 1 g.drawLine( right - 5, 1, right - 4, 1 ); // part of slant 2 g.drawLine( right - 3, 2, right - 3, 3 ); // part of slant 2 g.drawLine( right - 2, 4, right - 2, 5 ); // part of slant 2 // Draw highlight g.setColor( MetalLookAndFeel.getPrimaryControl() ); g.drawLine( 3, 1, 3, bottom - 1 ); // left g.drawLine( 3, 1, right - 6, 1 ); // top g.drawLine( right - 2, 7, right - 2, bottom - 1 ); // right g.drawLine( right - 5, 2, right - 3, 4 ); // slant g.drawLine( 3, bottom - 1, right - 2, bottom - 1 ); // bottom } public int getShift() { return 0; } public int getAdditionalHeight() { return 0; } public int getIconWidth() { return fileIcon16Size.width; } public int getIconHeight() { return fileIcon16Size.height + getAdditionalHeight(); } } public static class TreeLeafIcon extends FileIcon16 { public int getShift() { return 2; } public int getAdditionalHeight() { return 4; } } static private final Dimension treeControlSize = new Dimension( 18, 18 ); /** * <p> * <strong>Warning:</strong> * Serialized objects of this class will not be compatible with * future Swing releases. The current serialization support is * appropriate for short term storage or RMI between applications running * the same version of Swing. As of 1.4, support for long term storage * of all JavaBeans<sup><font size="-2">TM</font></sup> * has been added to the <code>java.beans</code> package. * Please see {@link java.beans.XMLEncoder}. */ public static class TreeControlIcon implements Icon, Serializable { // This data member should not have been exposed. It's called // isLight, but now it really means isCollapsed. Since we can't change // any APIs... that's life. protected boolean isLight; public TreeControlIcon( boolean isCollapsed ) { isLight = isCollapsed; } ImageCacher imageCacher; transient boolean cachedOrientation = true; public void paintIcon(Component c, Graphics g, int x, int y) { GraphicsConfiguration gc = c.getGraphicsConfiguration(); if (imageCacher == null) { imageCacher = new ImageCacher(); } Image image = imageCacher.getImage(gc); if (image == null || cachedOrientation != MetalUtils.isLeftToRight(c)) { cachedOrientation = MetalUtils.isLeftToRight(c); if (gc != null) { image = gc.createCompatibleImage(getIconWidth(), getIconHeight(), Transparency.BITMASK); } else { image = new BufferedImage(getIconWidth(), getIconHeight(), BufferedImage.TYPE_INT_ARGB); } Graphics imageG = image.getGraphics(); paintMe(c,imageG,x,y); imageG.dispose(); imageCacher.cacheImage(image, gc); } if (MetalUtils.isLeftToRight(c)) { if (isLight) { // isCollapsed g.drawImage(image, x+5, y+3, x+18, y+13, 4,3, 17, 13, null); } else { g.drawImage(image, x+5, y+3, x+18, y+17, 4,3, 17, 17, null); } } else { if (isLight) { // isCollapsed g.drawImage(image, x+3, y+3, x+16, y+13, 4, 3, 17, 13, null); } else { g.drawImage(image, x+3, y+3, x+16, y+17, 4, 3, 17, 17, null); } } } public void paintMe(Component c, Graphics g, int x, int y) { g.setColor( MetalLookAndFeel.getPrimaryControlInfo() ); int xoff = (MetalUtils.isLeftToRight(c)) ? 0 : 4; // Draw circle g.drawLine( xoff + 4, 6, xoff + 4, 9 ); // left g.drawLine( xoff + 5, 5, xoff + 5, 5 ); // top left dot g.drawLine( xoff + 6, 4, xoff + 9, 4 ); // top g.drawLine( xoff + 10, 5, xoff + 10, 5 ); // top right dot g.drawLine( xoff + 11, 6, xoff + 11, 9 ); // right g.drawLine( xoff + 10, 10, xoff + 10, 10 ); // botom right dot g.drawLine( xoff + 6, 11, xoff + 9, 11 ); // bottom g.drawLine( xoff + 5, 10, xoff + 5, 10 ); // bottom left dot // Draw Center Dot g.drawLine( xoff + 7, 7, xoff + 8, 7 ); g.drawLine( xoff + 7, 8, xoff + 8, 8 ); // Draw Handle if ( isLight ) { // isCollapsed if( MetalUtils.isLeftToRight(c) ) { g.drawLine( 12, 7, 15, 7 ); g.drawLine( 12, 8, 15, 8 ); // g.setColor( c.getBackground() ); // g.drawLine( 16, 7, 16, 8 );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -