gpt4 book ai didi

java - JButton 在使用 .setIcon(ICON) 时不会更改更新图像;

转载 作者:行者123 更新时间:2023-11-29 03:25:32 26 4
gpt4 key购买 nike

我已经查过了this重复的问题和其他类似的问题,但没有帮助。我正在尝试在单击按钮时将 png 添加到按钮。该程序是一种大小可变的学校井字游戏。

现在我有:

private ImageIcon X_MARK = new ImageIcon("x.png");
private ImageIcon O_MARK = new ImageIcon("o.gif");
private JButton[][] cells;

...

cells = new JButton[size][size];
JPanel board = new JPanel(new GridLayout(size, size));
board.setBorder(new LineBorder(Color.BLACK, 1));

ButtonListener listener = new ButtonListener();

for (int i = 0; i < size; i++)
for (int j = 0; j < size; j++) {
cells[i][j] = new JButton();
cells[i][j].addActionListener(listener);
board.add(cells[i][j]);
}
JFrame ttt = new JFrame();
ttt.add(board);
ttt.setTitle("Show GUI Components");
ttt.setSize(60*size, 60*size);
ttt.setLocation(0, 0);
ttt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ttt.setVisible(true);

...

class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {

int i, j;

for (i = 0; i < size; i++)
for (j = 0; j < size; j++)
if (e.getSource() == cells[i][j]) {
if ((i + j) % 2 == 0) {
cells[i][j].setBackground(Color.GREEN);
cells[i][j].setIcon(X_MARK);
} else {
cells[i][j].setBackground(Color.CYAN);
cells[i][j].setIcon(O_MARK);
}
}

}
}

这就是我认为的所有相关代码。我正在使用 Eclipse,我在项目的 src 文件夹和 bin 文件夹中有 x.png 和 o.png。我还尝试了一些我在 SO 和谷歌搜索中看到的变体,例如 new ImageIcon("C:/Users/BigBoy/workspace_1/EventDriven/src/x.png");, new ImageIcon("src/x.png");,以及其他一些涉及 getClass().getResource 的内容。我不知道还能尝试什么。我知道我过去曾这样做过,没有遇到过这么多麻烦。

我添加了 .setBackground(Color.GREEN); 只是为了确保我的点击正确注册,对我来说问题似乎出在 ImageIcon 的声明/初始化上。

注意:现在我的按钮监听器只是制作棋盘图案,在我弄清楚这个图标问题后,我将开始实际放置每个玩家的标记。

最佳答案

您需要了解您将要使用的资源。它们相对于类文件定位。如果图像与类文件一起,则

  • 将您的图片作为资源
  • 从图像创建一个 ImageIcon。

例如,类似:

package whateverpackeyouareusing;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;


public class DefaultFoo {
public static void main(String[] args) throws IOException {
String resource = "x.png";
URL url = Class.class.getResource(resource);
BufferedImage img = ImageIO.read(url);
Icon icon = new ImageIcon(img);
JOptionPane.showMessageDialog(null, icon);
}
}

编辑:根据 Andrew Thompson 的更好示例:

package some.package;

import java.awt.Image;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;


public class PlayWithImages {
public static final String X_RESOURCE = "x.png";
private Icon xIcon;

public PlayWithImages() throws IOException {
URL xImgUrl = getClass().getResource(X_RESOURCE);
Image xImg = ImageIO.read(xImgUrl);
xIcon = new ImageIcon(xImg);
}

public Icon getXIcon() {
return xIcon;
}

public static void main(String[] args) {
try {
PlayWithImages playWithImages = new PlayWithImages();
Icon xIcon = playWithImages.getXIcon();
JOptionPane.showMessageDialog(null, xIcon);
} catch (IOException e) {
e.printStackTrace();
}

}
}

关于java - JButton 在使用 .setIcon(ICON) 时不会更改更新图像;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21246036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com