package co.forsaken.projectindigo.gui.components; import java.awt.Color; 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.JButton; import javax.swing.JComponent; import co.forsaken.projectindigo.IndigoLauncher; @SuppressWarnings("serial") public class Button extends JButton implements MouseListener { private boolean isClicked = false; private boolean isHovering = false; private boolean _isToggle = false; private Color hoverColour = Color.LIGHT_GRAY; public Button(JComponent frame, String label) { this(frame, label, false); } public Button(JComponent frame, String label, boolean isToggle) { this(label); _isToggle = isToggle; frame.add(this, 0); } private Button(String label) { setText(label); setBackground(Color.WHITE); addMouseListener(this); setFont(IndigoLauncher.getMinecraftFont(14)); setRolloverEnabled(false); setBorder(null); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); Rectangle2D rect = new Rectangle2D.Float(0, 0, getWidth(), getHeight()); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(!this.isClicked ? getBackground() : Color.BLACK); g2d.fill(rect); g2d.setColor(hoverColour); if (this.isHovering && !this.isClicked) g2d.fill(rect); g2d.setFont(getFont()); int width = g2d.getFontMetrics().stringWidth(getText()); g2d.setColor(this.isClicked ? getBackground() : Color.BLACK); g2d.drawString(getText(), (getWidth() - width) / 2, getFont().getSize() + 4); g2d.dispose(); } public void setHoverColour(Color colour) { this.hoverColour = colour; } public boolean isClicked() { return isClicked || !isEnabled(); } public void mouseClicked(MouseEvent e) { if (_isToggle) { this.isClicked = !this.isClicked; } } public void mousePressed(MouseEvent e) { if (!_isToggle) { this.isClicked = true; } } public void mouseReleased(MouseEvent e) { if (!_isToggle) { this.isClicked = false; } } public void mouseEntered(MouseEvent e) { isHovering = true; this.repaint(); } public void mouseExited(MouseEvent e) { isHovering = false; this.repaint(); } }