【问题标题】:Issue with button icons, Java 8-Queens puzzle按钮图标问题,Java 8-Queens 谜题
【发布时间】:2015-05-06 16:13:14
【问题描述】:

我遇到的问题是:我在 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 的问题的其他部分时遇到了困难,所以如果您有任何建议,请告诉我!

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

【问题讨论】:

  • "创建黑白按钮的方法都出现了问题,但是除了颜色之外,方法都是一样的。" 哪个问题?
  • @Ray 当我点击我的按钮时,无论颜色如何,女王的形象都不会出现

标签: java swing user-interface icons jbutton


【解决方案1】:

提问时说明确切的问题。

当我单击这些按钮时,它们应该会变成女王的图像。

所以我猜图标没有改变?

你有没有:

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

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

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

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

如果您有任何建议,请告诉我!

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

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()
    }
}

【讨论】:

  • 我编辑了我的帖子。见编辑。 “/”没有什么区别我在调试过程中尝试了两种方式。感谢您的意见。
  • “/”确实对我在 Windows 7 上使用 JDK7 产生了影响。您添加的用于确定图标 id 是否为空的调试代码在哪里? if you need more code I will certainly supply it 发布一个正确的SSCCE 来说明问题。那就是使用 JButton 创建一个简单的文本框。当您单击按钮时,应将图标添加到按钮中。编写将向按钮添加图标的 ActionListener 将需要 20 行代码来发送 concept 的文本。我们不关心实际应用,重要的是基本概念。
  • 我已经解决了这个问题。谢谢。对不起,我浪费了你的时间。对 java 不是很熟悉,只是想完成一个家庭作业问题……不过,感谢您的贡献。 @camickr
猜你喜欢
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多