我正在尝试创建一个具有自定义形状(六边形)的按钮,但其他方式就像普通的JButton一样(也就是说,与ActionListener一起使用).
我创建了一个扩展AbstractButton的类,但是当我单击它时它似乎没有向ActionListener发送事件.如果我更改类以扩展JButton它可以很好地工作,但它会搞砸按钮的显示方式.我假设有一个方法需要覆盖以使其触发事件,但我无法弄清楚它是什么.
阅读编辑2,了解我实际上缺少的内容
我目前正在尝试使用在photoshop中创建的具有alpha参数的图像创建一些自定义JButton.
到目前为止,覆盖paint()方法来绘制图像已经起到了绘制按钮以显示正确图像的意义.不过,我想通过使其形状(可点击区域)与图像上的可见像素相同来改进它(现在,如果我绘制按钮的边框,它就是一个正方形).
有没有一种简单的方法可以做到这一点,还是我必须解析图像并找到alpha像素来制作自定义边框?
我必须覆盖哪些方法才能使其按照我想要的方式工作?
另外,我将在稍后提出的另一个问题是:使用某种算法来更改图像的颜色会更好,这样看起来当人们点击它时它被点击或者我最好创建第二个按钮处于活动状态时图像和绘图?
编辑:我刚刚读到一些其他问题,我应该重新定义paintComponent()而不是paint(),我想知道为什么重新定义paint()工作正常?
编辑2:我改变了一切,以确保我的JButton是使用带图标的默认构造函数创建的.我要做的是获取点击注册位置的X和Y位置并抓住该位置的图标像素并检查其alpha通道以查看它是否为0(如果是,则不执行任何操作,否则执行此操作应该采取的行动).
问题是,alpha通道始终返回255(蓝色,红色和绿色在透明像素上为238).在其他像素上,一切都返回它应该返回的值.
这是一个示例(如果需要,可以使用另一个图像尝试)重新创建我的问题:
public class TestAlphaPixels extends JFrame
{
private final File FILECLOSEBUTTON = new File("img\\boutonrondX.png"); //My round button with transparent corners
private JButton closeButton = new JButton(); //Creating it empty to be able to place it and resize the image after the button size is known
public TestAlphaPixels() throws IOException
{
setLayout(null);
setSize(150, 150);
closeButton.setSize(100, 100);
closeButton.setContentAreaFilled(false);
closeButton.setBorderPainted(false);
add(closeButton);
closeButton.addMouseListener(new MouseListener()
{
public void mouseClicked(MouseEvent e)
{
}
public void …Run Code Online (Sandbox Code Playgroud)