定制JButton paintComponent方法直观修改形状?不是实际的按钮形状? 您所在的位置:网站首页 java按钮形状 定制JButton paintComponent方法直观修改形状?不是实际的按钮形状?

定制JButton paintComponent方法直观修改形状?不是实际的按钮形状?

2022-05-25 08:23| 来源: 网络整理| 查看: 265

我想创建一个包含地图的应用程序(Java)。每个县或州,都需要有自己的鼠标悬停,鼠标点击等方法。定制JButton paintComponent方法直观修改形状?不是实际的按钮形状?

我试图做到这一点的方式是通过覆盖扩展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); }

结果:

http://s9.postimg.org/cr8t6uym7/ss1.png

我想实现(在画图编辑):

http://s23.postimg.org/aabdtin6z/ss2.png

我想这是因为即使我重写了paintComponent方法。这个 只修改JButton内部绘制的内容?所以JButton 的边界保持矩形?有没有办法来解决这个问题?或者我应该试图以完全不同的方式实现这个 ?

任何帮助将是伟大的!我甚至在OpenGL中看过编程这个..我很有经验的 !它的永恒!

非常感谢

来源

2014-01-14 Tim Winwood



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有