1 package org.antlr.works.swing; 2 3 import javax.swing.*; 4 import java.awt.*; 5 import java.awt.font.TextLayout ; 6 import java.awt.geom.Rectangle2D ; 7 37 38 public class CustomToggleButton extends JToggleButton { 39 40 public int tag; 41 public final int round = 4; 42 public final int height = 22; 43 public final float fontSize = 12f; 44 45 public CustomToggleButton(String title) { 46 super(title); 47 setBorderPainted(false); 48 setMaximumSize(new Dimension(0, height)); 49 setFont(getFont().deriveFont(fontSize)); 50 } 51 52 public void setTag(int tag) { 53 this.tag = tag; 54 } 55 56 public int getTag() { 57 return tag; 58 } 59 60 public void paintComponent(Graphics g) { 61 g.setColor(getBackground()); 62 g.fillRect(0, 0, getWidth(), getHeight()); 63 paintButton((Graphics2D)g, 0, 0, getWidth()-2, getHeight()-1, isSelected()); 64 } 65 66 public void paintButton(Graphics2D g2d, int x, int y, int width, int height, boolean selected) { 67 Color topColor; 68 Color middleUpColor; 69 Color middleDownColor; 70 Color bottomColor; 71 final Color snowColor = new Color(0.95f, 0.95f, 0.95f); 72 73 if(selected) { 74 topColor = new Color(0.7f, 0.9f, 1.0f); 75 middleUpColor = new Color(0.5f, 0.7f, 1.0f); 76 middleDownColor = new Color(0.1f, 0.6f, 0.9f); 77 bottomColor = new Color(0.8f, 0.9f, 1.0f); 78 } else { 79 topColor = new Color(0.99f, 0.99f, 0.99f); 80 middleUpColor = new Color(0.9f, 0.9f, 0.9f); 81 middleDownColor = new Color(0.85f, 0.85f, 0.85f); 82 bottomColor = new Color(0.99f, 0.99f, 0.99f); 83 } 84 85 GradientPaint gradient = new GradientPaint(x, y, topColor, 86 x, y+height/2, middleUpColor); 87 g2d.setPaint(gradient); 88 g2d.fillRect(x, y, width, height/2); 89 90 g2d.setColor(snowColor); 91 g2d.drawLine(x, y+1, x+width, y+1); 92 93 gradient = new GradientPaint(x, y+height/2, middleDownColor, 94 x, y+height, bottomColor); 95 g2d.setPaint(gradient); 96 g2d.fillRect(x, y+height/2, width, height/2); 97 98 if(selected) 99 g2d.setColor(Color.darkGray); 100 else 101 g2d.setColor(Color.gray); 102 g2d.drawRoundRect(x, y, width, height, round, round); 103 104 TextLayout layout = new TextLayout (getText(), g2d.getFont(), g2d.getFontRenderContext()); 106 Rectangle2D r = layout.getBounds(); 107 108 float tx = (float) (width*0.5f-r.getWidth()*0.5f); 109 float ty = (float) (height*0.5f+r.getHeight()*0.5f); 110 g2d.setColor(Color.black); 111 layout.draw(g2d, tx, ty); 112 } 113 114 } 115 | Popular Tags |