package ddddbb.gui3d; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.Rectangle2D; import javax.swing.Icon; import javax.swing.JButton; import ddddbb.game.Settings; @SuppressWarnings("serial") public class DButton extends JButton { static class RolloverIcon implements Icon { Component c; RolloverIcon(Component c) { this.c = c; } @Override public int getIconHeight() { return c.getHeight()-1; } @Override public int getIconWidth() { return c.getWidth()-1; } @Override public void paintIcon(Component c, Graphics g, int x, int y) { g.setColor(Color.white); g.drawLine(x+0, y+5, x+5, y+0); g.drawLine(0, 5, 5, 0); System.out.println(x + "," + y); } } public final String text; public final Font font; private final RolloverIcon rolloverIcon; private boolean mouseInside = false; public DButton(int width, int height, String _text) { text = _text; font = new Font(Font.DIALOG,Font.PLAIN,12); setFont(font); setPreferredSize(new Dimension(width,height)); //setRolloverEnabled(false); setRolloverEnabled(true); rolloverIcon = new RolloverIcon(this); //setRolloverIcon(rolloverIcon); //setOpaque(false); addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) { mouseInside = true; repaint(); } @Override public void mouseExited(MouseEvent e) { mouseInside = false; repaint(); } @Override public void mousePressed(MouseEvent e) {} @Override public void mouseReleased(MouseEvent e) {} }); } public void paint(Graphics g) { Graphics2D gc = (Graphics2D) g; // for antialiasing text gc.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); gc.setRenderingHint( RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); Dimension d = getSize(); //System.out.println(d.width + "x" + d.height); //System.out.println(d.width + "," + d.height); int w = d.width - 1; int h = d.height - 1; float brightness = (float) Settings.brightness.getDouble(); gc.setColor(Color.black); gc.fillRect(0,0,getWidth(),getHeight()); gc.setColor(new Color(brightness,brightness,brightness)); if (mouseInside) gc.drawRoundRect(0, 0, w, h, 8, 8); else gc.drawRect(0, 0, w, h); FontMetrics fm = gc.getFontMetrics(); Rectangle2D sb = fm.getStringBounds(text, gc); double x = (d.width - sb.getWidth())/2; double y = (d.height+ sb.getHeight())/2 - fm.getDescent(); gc.drawString(text, (int)Math.round(x), (int)Math.round(y)); } }