【发布时间】:2014-02-02 12:31:48
【问题描述】:
我正在尝试创建一个包含地图的应用程序 (Java)。每个县或州,都需要有自己的 mouseover、mouseClicked 方法等。
我尝试这样做的方法是在扩展 JButton 的自定义类中覆盖paintComponent 和paintBorder 方法。代码和结果截图:
public class CustomButton extends JButton implements MouseListener {
private Polygon shape;
private boolean isMouseOver;
private Color buttonColor = new Color(100,100,100);
public CustomButton (Polygon shape,Color buttonColor) {
//this.setText(text);
this.buttonColor = buttonColor;
this.shape = shape;
setContentAreaFilled(false);
addMouseListener(this);
}
@Override
public Dimension getPreferredSize() {
return (new Dimension(120, 120));
}
// Hit detection
public boolean contains(int x, int y) {
return shape.contains(x, y);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
if (isMouseOver && isEnabled()) {
g.setColor(new Color(buttonColor.getRed()+50,buttonColor.getGreen()+50,buttonColor.getBlue()+50));
}else{
g.setColor(buttonColor);
}
g.fillPolygon(shape);
}
protected void paintBorder(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
g2d.setStroke(new BasicStroke(2));
if (isMouseOver && isEnabled()) {
g2d.setColor(new Color(buttonColor.getRed()-50,buttonColor.getGreen()-50,buttonColor.getBlue()-50));
}else{
g2d.setColor(new Color(buttonColor.getRed()-100,buttonColor.getGreen()-100,buttonColor.getBlue()-100));
}
g2d.drawPolygon(shape);
}
结果:
我想要实现的目标(在 Paint 中编辑):
我认为这是因为即使我重写了paintComponent 方法。这 只修改 JButton 内绘制的内容?所以 JButton 的边界 保持矩形?有没有办法来解决这个问题?还是我应该努力实现这一目标 以完全不同的方式?
任何帮助都会很棒!我什至看过在 OpenGL 中对此进行编程。我非常 小经验!而且它会永远消失!
非常感谢
提姆
【问题讨论】:
标签: java swing jbutton paintcomponent