de.invation.code.toval.graphic.component.CustomButton Maven / Gradle / Ivy
package de.invation.code.toval.graphic.component;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
public class CustomButton extends JButton implements MouseListener{
private static final long serialVersionUID = 3889043442511822359L;
private final int horizontalMargin = 5;
private final int verticalMargin = 5;
private final Color COLOR_BG_PRESSED = Color.darkGray;
private final Color COLOR_BG_HOVER = Color.gray;
private final Color COLOR_BG_DISABLED = Color.lightGray;
private final Color COLOR_BG_DEFAULT = Color.lightGray;
private boolean drawLine = false;
private boolean mouseOverComponent = false;
private boolean mousePressed = false;
public CustomButton(String label) {
super(label);
setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));
addMouseListener(this);
}
@Override
protected void paintComponent(Graphics g) {
// super.paintComponent(g);
Dimension originalSize = getSize();
Dimension canvasSize = new Dimension(originalSize.width-2*horizontalMargin, originalSize.height-2*verticalMargin);
int r = canvasSize.height / 2;
g.setColor(getBackgroundColor());
g.fillOval(horizontalMargin, verticalMargin, canvasSize.height, canvasSize.height);
g.fillOval(horizontalMargin + canvasSize.width - r - r, verticalMargin, canvasSize.height, canvasSize.height);
if(drawLine){
g.setColor(Color.BLACK);
g.drawOval(horizontalMargin, verticalMargin, canvasSize.height, canvasSize.height);
g.drawOval(horizontalMargin + canvasSize.width - r - r, verticalMargin, canvasSize.height, canvasSize.height);
g.setColor(getBackgroundColor());
}
g.fillRect(horizontalMargin + r, verticalMargin, canvasSize.width - r - r, canvasSize.height+1);
if(drawLine){
g.setColor(Color.BLACK);
g.drawLine(horizontalMargin + r, verticalMargin, horizontalMargin - r + canvasSize.width, verticalMargin);
g.drawLine(horizontalMargin + r, verticalMargin + canvasSize.height, horizontalMargin - r + canvasSize.width, verticalMargin + canvasSize.height);
}
g.setColor(Color.BLACK);
FontMetrics fm = g.getFontMetrics();
int x = verticalMargin + r;
int space = (int) (canvasSize.getWidth()-(2*r) - fm.stringWidth(getText()))/2;
x = space>0 ? x + space: x;
int y = canvasSize.height - fm.getHeight() + verticalMargin + verticalMargin;
y = y<0 ? 0: y;
y = y==0 ? 0: y/2;
y += fm.getAscent();
g.drawString(getText(), x, y);
}
private Color getBackgroundColor(){
if(!isEnabled())
return COLOR_BG_DISABLED;
if(mousePressed)
return COLOR_BG_PRESSED;
if(mouseOverComponent)
return COLOR_BG_HOVER;
return COLOR_BG_DEFAULT;
}
@Override
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
size.width += size.height;
return size;
}
@Override
public void mouseClicked(MouseEvent e) {
setSelected(!isSelected());
}
@Override
public void mousePressed(MouseEvent e) {
mousePressed = true;
}
@Override
public void mouseReleased(MouseEvent e) {
mousePressed = false;
}
@Override
public void mouseEntered(MouseEvent e) {
mouseOverComponent = true;
repaint();
}
@Override
public void mouseExited(MouseEvent e) {
mouseOverComponent = false;
mousePressed = false;
repaint();
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy