gpt4 book ai didi

java - 使用随机分配图像将相同的图像分配给所有 JButton

转载 作者:行者123 更新时间:2023-12-01 10:44:49 25 4
gpt4 key购买 nike

用我的代码做了一个简单的骰子 throw 测试,试图找出为什么每个 JButton 显示相同的图像。我有一种感觉,程序没有正确读取这些值,因此它为所有 JButton 分配相同的图像。

测试类

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test extends JFrame {

JButton[] pic = new JButton[5];
JPanel panel = new JPanel();
JButton throwDice = new JButton("Throw");
ImageIcon img;

Die[] dieH = new Die[5];
Dice dice = new Dice();

Test(String title) {
super(title);
setSize(400, 400);
setLayout(new BorderLayout());
add(panel, BorderLayout.CENTER);
components();
throwHandle();
}

public static void main(String[] args) {
Test test = new Test("Test");
test.setVisible(true);
}

public void components() {
for (int i = 0; i < 5; i++) {
pic[i] = new JButton("");
pic[i].setPreferredSize(new Dimension(50, 50));
panel.add(pic[i]);
}
panel.add(throwDice);
}

public void throwHandle() {
throwDice.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dieH = dice.roll();

for (int i = 0; i < 5; i++) {
pic[i].setIcon(dieH[i].getDieImage());
System.out.println(dieH[i].getValue());
}
}
});
}
}

模具类

import javax.swing.*;

public class Die {

int faceValue;
ImageIcon img;

public ImageIcon getDieImage() {
return img;
}

public void setImage() {
for (int i = 0; i < 7; i++) {
img = new ImageIcon("./src/images/" + i + ".png");
}
}

public void setValue(int v) {
this.faceValue = v;
setImage();
}

public int getValue() {
return faceValue;
}
}

骰子类

import java.util.Random;

public class Dice {

Die[] diceArray = new Die[6];

int min = 1, max = 6;

public Dice() {
for (int i = 0; i < diceArray.length; i++) {
diceArray[i] = new Die();
diceArray[i].setValue(i + 1);
}
}

public Die[] roll() {
Random rm = new Random();
Die[] roll = new Die[5];

for (int i = 0; i < 5; i++) {
int newRandom = rm.nextInt((max - min) + 1);
roll[i] = diceArray[newRandom];
System.out.println(roll[i].getValue());
}

return roll;
}

}

最佳答案

让我们检查以下代码:

public class Die {

int faceValue;
ImageIcon img;

因此,骰子具有独特的面值和独特的图像

    public ImageIcon getDieImage() {
return img;
}

public void setImage() {
for (int i = 0; i < 7; i++) {
img = new ImageIcon("./src/images/" + i + ".png");
}

因此,您从 0 循环到 6,并且在每次迭代时,您都用新图像替换前一个图像。这相当于 img = new ImageIcon("./src/images/6.png");。另请注意,图像不取决于模具的面 favleu。

    }

public void setValue(int v) {
this.faceValue = v;
setImage();

这设置了骰子的面值,然后设置了图像,但图像根本不依赖于面值。

    }

public int getValue() {
return faceValue;
}
}

所以,基本上,setImage()需要使用面值,并根据面值设置图像。它也应该是私有(private)的:您不希望任何人在不改变骰子面值的情况下改变骰子的图像。

private void setImage() {
img = new ImageIcon("./src/images/" + this.faceValue + ".png");
}

关于java - 使用随机分配图像将相同的图像分配给所有 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34249878/

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