您好我正在制作一个需要随机抽取骰子1-6的程序
我想为任何数字节目显示图片。
这里我用jlable初始化了图片
JLabel diceNumber;
Random r = new Random();
int roll;
ImageIcon dicePic1 = new ImageIcon("dice1_.png");
ImageIcon dicePic2 = new ImageIcon("dice2.png");
ImageIcon dicePic3 = new ImageIcon("dice3.png");
ImageIcon dicePic4 = new ImageIcon("dice4.png");
ImageIcon dicePic5 = new ImageIcon("dice5.png");
ImageIcon dicePic6 = new ImageIcon("dice6.png");
JLabel diceNum1 = new JLabel("", dicePic1, JLabel.CENTER);
JLabel diceNum2 = new JLabel("", dicePic2, JLabel.CENTER);
JLabel diceNum3 = new JLabel("", dicePic3, JLabel.CENTER);
JLabel diceNum4 = new JLabel("", dicePic4, JLabel.CENTER);
JLabel diceNum5 = new JLabel("", dicePic5, JLabel.CENTER);
JLabel diceNum6 = new JLabel("", dicePic6, JLabel.CENTER);
这是将出现一张照片的面板 使用if语句,我必须初始化diceNumber
JPanel panel6 = new JPanel();
diceNumber = new JLabel("1");
if (diceNumber.getText().equals("1")) {
panel6.add(diceNum1);
}
else if (diceNumber.getText().equals("2")) {
panel6.add(diceNum2);
}
else if (diceNumber.getText().equals("3")) {
panel6.add(diceNum3);
}
else if (diceNumber.getText().equals("4")) {
panel6.add(diceNum4);
}
else if (diceNumber.getText().equals("5")) {
panel6.add(diceNum5);
}
else if (diceNumber.getText().equals("6")) {
panel6.add(diceNum6);
}
这时我开始滚动
public void actionPerformed(ActionEvent e) {
if (e.getSource() == dice) {
roll = r.nextInt(6) + 1;
if (roll == 1) {
diceNumber.setText("1");
}
else if (roll == 2) {
diceNumber.setText("2");
}
else if (roll == 3) {
diceNumber.setText("3");
}
else if (roll == 4) {
diceNumber.setText("4");
}
else if (roll == 5) {
diceNumber.setText("5");
}
else if (roll == 6) {
diceNumber.setText("6");
}
问题是,diceNumber总是取值" 1"永远不会改变 有什么帮助吗?
答案 0 :(得分:3)
diceNumber = new JLabel("1");
紧接在diceNumber文本的逻辑检查之前。在这个阶段,你已经发布了一个带有文本" 1"的JLabel,因此它将永远是" 1"在这个阶段。您不会更改文本,直到很久以后,您不再检查设置骰子图像。你采取的方法类似于Rube Goldberg机器;触发一系列事件以执行相对简单的任务。 简单解决方案将是:
List<JLabel> disc = new ArrayList<>();
for (int i = 1; i <= 6; i++) {
disc.add(new ImageIcon(String.format("dice%d_.png", i));
}
然后当您需要更改您调用的图像时:
int roll = r.nextInt(6) + 1;
panel.add(disc[roll]);
无论如何,可以对代码进行许多改进;我建议您将过多的if语句更改为:
diceNumber.setText(roll.toString()); or
diceNumber.setText(roll + "");
答案 1 :(得分:1)
在actionPerformed()
方法中,您可以更改diceNumber
标签的文字,而这就是您所做的一切。您不会更改图像标签显示的图像。
您应该真正了解数组,并将6个图像存储在数组中。你的逻辑应该是:
init() {
// add a label displaying the number (1 by default)
// add a label displaying the icon (1 by default)
}
actionPerformed() {
// choose a random number
// change the text of the number label
// change the icon of the image label
}
要做到这一点,你需要大量的if语句:它应该只是
imageLabel.setIcon(images[randomRoll - 1]);