我正在尝试创建一个具有自定义形状(六边形)的按钮,但其他方式就像普通的JButton一样(也就是说,与ActionListener一起使用).
我创建了一个扩展AbstractButton的类,但是当我单击它时它似乎没有向ActionListener发送事件.如果我更改类以扩展JButton它可以很好地工作,但它会搞砸按钮的显示方式.我假设有一个方法需要覆盖以使其触发事件,但我无法弄清楚它是什么.
用Java 实现" Kings'Corners "(荣耀的多人游戏纸牌).
我试图允许玩家将牌(图像)从他们的手拖到桌子上的其他地方.问题是玩家的手被"扇动",因此卡片的图像会旋转并重叠.
这是一只手的例子:

我考虑过制作每张卡片JPanel,但问题是我必须将卡片在矩形 内部旋转JPanel,因为它们本身无法旋转.理想情况下,我想避免使用mouse-x,y公式来确定选择哪张卡.
使用事件驱动的方法,我如何确定从手中选择哪张牌?
如何让JButton可见?
1)当没有打开渐进背景时:JButton正在显示

2)当没有打开渐进背景时,按下JButton仍然没有显示闪烁:

3)当打开渐进背景时,JButton是不可见的,按此时我看到闪烁,JButton()出现并再次隐藏自动.<<问题在这里,我该如何解决?

import java.awt.Color;
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Graphics;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public class ButtonTest extends JWindow implements MouseListener, MouseMotionListener {
private static final long serialVersionUID = 1L;
private JFrame frame = new JFrame();
private SoftJButton softButton1;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ButtonTest j = new ButtonTest();
j.createAndShowGUI();
}
});
}
public void createAndShowGUI() {
softButton1 = new SoftJButton("Transparent Button");
softButton1.setBackground(Color.GREEN);
softButton1.setAlpha(0.5f);
softButton1.setDoubleBuffered(true); …Run Code Online (Sandbox Code Playgroud) 我有一个类扩展JButton,我试图应用.png图像.图像形状不规则,并被透明像素包围.我已经覆盖了paintComponent()方法,在JButton我的缓冲图像应用到按钮.现在,图像是唯一被绘制的东西,这就是我想要的.
但是,按钮仍然会检测周围矩形中的事件.有没有办法将检测限制在仅包含不透明像素的区域(或者更确切地说不检测透明像素上的事件)?
按钮类的代码如下.
public class DrawButton extends JButton{
private BufferedImage bi;
public DrawButton(BufferedImage bi){
setPreferredSize(new Dimension(bi.getWidth(), bi.getHeight()));
this.bi = bi;
}
@Override
protected void paintComponent(Graphics g){
g.drawImage(bi, 0, 0, null);
g.dispose();
}
}
Run Code Online (Sandbox Code Playgroud)