Java 为什么我的操作侦听器在单击时没有显示正确的图像? 我现在正试图编码一个匹配的游戏。我已经为JButton和ImageIcon创建了一个二维数组。我已经做了一个洗牌类名Shuffle这个类洗牌ImageIcon在它的数组中的位置。在没有底牌的情况下开始游戏时,牌会被洗牌。但是当我用基本卡开始游戏并加入动作监听器时,当你点击卡时,没有图像。如果有人能帮我解决这个问题,我将不胜感激

Java 为什么我的操作侦听器在单击时没有显示正确的图像? 我现在正试图编码一个匹配的游戏。我已经为JButton和ImageIcon创建了一个二维数组。我已经做了一个洗牌类名Shuffle这个类洗牌ImageIcon在它的数组中的位置。在没有底牌的情况下开始游戏时,牌会被洗牌。但是当我用基本卡开始游戏并加入动作监听器时,当你点击卡时,没有图像。如果有人能帮我解决这个问题,我将不胜感激,java,arrays,image,swing,shuffle,Java,Arrays,Image,Swing,Shuffle,考虑以下代码: 框架的方法: void game() { Shuffle shuffle = new Shuffle(); shuffle.random2(); ImageIcon base = new ImageIcon("images/BaseCard.png"); int x = 60; int y = 20; JFrame frame = obj.frame(); JLabel

考虑以下代码:

框架的方法:

void game() {
        Shuffle shuffle = new Shuffle();
        shuffle.random2();
        ImageIcon base = new ImageIcon("images/BaseCard.png");
        int x = 60;
        int y = 20;
        JFrame frame = obj.frame();
        JLabel label = obj.label();
        for (int i = 0; i < cards.length; ++i) {
            for (int j = 0; j < cards[i].length; ++j) {
                cards[i][j] = obj.Comp(base);
                cards[i][j].addActionListener(new Clicked(i, j));
                cards[i][j].setBounds(x, y, 90, 126);
                y = y + 135;
                if (y >= 540) {
                    y = 20;
                    x = x + 120;
                }
                frame.add(cards[i][j]);
            }
        }

        frame.add(label);
        frame.setLayout(null);
        frame.setVisible(true);
    }
}

在您单击的
类中,您正在创建一个新的
Shuffle
,而不是:

public Clicked(Shuffle shuffle) {
    this.shuffle = shuffle;
}

这将为您提供先前创建和洗牌的“牌组”。您可能还想查看是否只单击了一个
并将其用于所有卡,如果您开始更改
洗牌

为什么不再添加几行代码并发布一个可能由其他人运行的帖子呢?
class Clicked implements ActionListener {

    Shuffle shuffle = new Shuffle();
    Matching matching = new Matching();
    private int i;
    private int j;

    public Clicked(int i, int j) {
        this.i = i;
        this.j = j;

    }

    public void actionPerformed(ActionEvent e) {
        JToggleButton tBtn = (JToggleButton) e.getSource();
        if (tBtn.isSelected()) {
            System.out.println("click");
            tBtn.setIcon(shuffle.Icons[i][j]);
        } else {
            System.out.println("not");
            tBtn.setIcon(new ImageIcon("images/BaseCard.png"));
        }

    }

}
public Clicked(Shuffle shuffle) {
    this.shuffle = shuffle;
}