if语句在java swing中添加了很多图片

时间:2017-12-16 11:57:51

标签: java swing

您好我正在制作一个需要随机抽取骰子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"永远不会改变 有什么帮助吗?

2 个答案:

答案 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]);