按钮图标问题,Java 8 皇后拼图

Issue with button icons, Java 8-Queens puzzle

我 运行 遇到的问题是:我在 JPanel 中有一个按钮网格,当我单击这些按钮时,这些按钮应该会变成女王的图像。代码如下所示:

private Component createButtonBlack() {
    final JButton button = new BoardButton();
    final ImageIcon queen = new ImageIcon("/images/queen.png");

    button.setBackground(Color.BLACK);
    button.setPreferredSize(new Dimension(40, 40));

    class QueenClick implements ActionListener {

        public void actionPerformed(ActionEvent event) {
            button.setIcon(queen); 
            button.repaint();
        }
    } // end QueenClick

    ActionListener queenClicker = new QueenClick();
    button.addActionListener(queenClicker);
    return button;
} // end createButtonBlack

创建黑白按钮的两种方法均出现问题(图像未出现),但方法相同,只是颜色不同。理想情况下,我希望能够取消单击按钮并且图像消失,但我不知道该怎么做。

我在解决基于 8queens GUI 的问题的其他部分时遇到困难,所以如果您有任何建议,请告诉我!

此外,如果您需要更多代码,我一定会提供。谢谢。

在提问时说出确切的问题。

These buttons are supposed to change to an image of a queen when I click them.

所以我猜图标没有改变?

你有没有:

  1. 验证 ActionListener 代码是否已执行?
  2. 确认图标已正确读取?

您可以轻松添加 System.out.println(...) 来验证以上两项。

final ImageIcon queen = new ImageIcon("/images/queen.png");

我猜问题是路径中的前导“/”。 “/”告诉文件系统查看驱动器的根目录。

if you have any suggestions let me know!

不需要创建两个方法。你可以这样做:

Component button = createButton();
button.setBackground( Color.BLACK );

无需创建单独的 ActionListener。您可以使用如下代码创建单个通用侦听器:

ActionListener queenClicker = new ActionListener()
{
    @Override
    public void actionPerformed(Action Event e)
    {
        JButton button = (JButton)e.getSource();
        button.setIcon( queen );
        //button.repaint(); // not needed the setIcon method will do the repaint()
    }
}