package org.infosec.ismp.applet.manager.component.panel.component; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.Ellipse2D; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import org.infosec.ismp.applet.manager.component.panel.SJTUConst; import org.infosec.ismp.applet.manager.component.panel.utils.SJTUUtils; /** * 信息按钮。 */ public class InfoComponent extends JComponent { public static void main(String[] args) { JPanel panel = new JPanel(); InfoComponent comp = new InfoComponent("test"); comp.setPreferredSize(new Dimension(200, 100)); panel.add(comp); SJTUUtils.showCompoentInFrame(panel); } private Color fillColor = Color.GRAY; private String text; private Color textColor = Color.BLUE; private Font textFont = SJTUConst.LABELFONT; public InfoComponent() { this(""); } public InfoComponent(String text) { this.text = text; this.setDoubleBuffered(true); this.setOpaque(false); } public Dimension getPreferredSize() { Dimension preferredSize = super.getPreferredSize(); if (preferredSize != null && preferredSize.width > 1 && preferredSize.height > 1) { return preferredSize; } return new Dimension(90, 40); } protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; Dimension size = this.getSize(); /*g2d.setColor(g2d.getBackground()); g2d.fillRect(0, 0, size.width, size.height);*/ g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Ellipse2D.Double ell = new Ellipse2D.Double(0, 0, size.width, size.height); GradientPaint paint = new GradientPaint((float) (size.width / 2.0), 0, fillColor.brighter(), (float) (size.width / 2.0), size.height, fillColor); g2d.setPaint(paint); g2d.fill(ell); double percent = 0.8; Ellipse2D.Double smallEll = new Ellipse2D.Double(size.width * (1 - percent) / 2, 2, size.width * 0.8, size.height * 0.8); paint = new GradientPaint((float) (size.width / 2.0), 0, Color.WHITE, (float) (size.width / 2.0), (float) (size.height * 0.8), fillColor.brighter()); g2d.setPaint(paint); g2d.fill(smallEll); if (text != null && !("".equals(text.trim())) && textFont != null) { Dimension textSize = SJTUUtils.getPreferredSize(text, textFont); int x = (int) (size.width / 2.0 - textSize.width / 2.0); int y = (int) (size.height / 2.0 - textSize.height / 2.0); JLabel label = SJTUUtils.getLabel(text, textFont, textColor); SJTUUtils.paintComponent(g2d, label, this, x, y, textSize.width, textSize.height); } } public boolean contains(int x, int y) { Dimension size = this.getSize(); Ellipse2D.Double ell = new Ellipse2D.Double(0, 0, size.width, size.height); return ell.contains(x, y); } public Color getFillColor() { return fillColor; } public void setFillColor(Color fillColor) { this.fillColor = fillColor; this.repaint(); } public String getText() { return text; } public void setText(String text) { this.text = text; this.repaint(); } public Color getTextColor() { return textColor; } public void setTextColor(Color textColor) { this.textColor = textColor; this.repaint(); } public Font getTextFont() { return textFont; } public void setTextFont(Font textFont) { this.textFont = textFont; this.repaint(); } }