java - 如何使用 java swing 在 JButton 上随机显示图像?

标签 java swing

好吧,基本上我已经创建了 5 个 jbutton,每个 jbutton 都应该在按下 throw 按钮时随机显示图像。 下面的代码显示了我相信的 6 个模具类以及随机图像生成器代码...

import javax.swing.*;
import java.util.*;
public class Dice {

    Die die1 = new Die();
    Die die2 = new Die();
    Die die3 = new Die();
    Die die4 = new Die();
    Die die5 = new Die();
    Die die6 = new Die();

    public void someFunc() {
        die1.setImage("1.png");
        die2.setImage("2.png");
        die3.setImage("3.png");
        die4.setImage("4.png");
        die5.setImage("5.png");
        die6.setImage("6.png");
    }

    public void roll() {
        ArrayList list = new ArrayList();
        Random posGen = new Random(5);

        for (int i = 0; i < 5; i++)
        switch (1 + posGen.nextInt()) {
            case 1:
                list.add(die1);
                break;
            case 2:
                list.add(die2);
                break;
            case 3:
                list.add(die3);
                break;
            case 4:
                list.add(die4);
                break;
            case 5:
                list.add(die5);
                break;
            case 6:
                list.add(die6);
                break;
        }

    }

}

所以让我再次解释一下,上面的类创建了 6 个 die 对象的实例。然后我将每个骰子分配给一个图像。那么 roll 方法应该将随机图像添加到数组列表中..

现在以下是我的 GUI 代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class Coursework2 {

    Dice mydice = new Dice();

    class MyActionListener implements ActionListener {

        JFrame frame;
        JButton die1;

        MyActionListener(JFrame f) {
            frame = f;

        }
        public void actionPerformed(ActionEvent e) {


            //die1.setIcon(null);

        }
    }
    public void gui() {

        JFrame frame = new JFrame("SimpleSwingExample");
        JPanel buttons = new JPanel();
        buttons.setLayout(null);
        JButton button = new JButton("throw the fucking die");
        frame.setContentPane(buttons);
        frame.getContentPane().add(button);
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

        JButton die1 = new JButton("die 1");
        JButton die2 = new JButton("die 2");
        JButton die3 = new JButton("die 3");
        JButton die4 = new JButton("die 4");
        JButton die5 = new JButton("die 5");

        button.addActionListener(new MyActionListener(frame));

        frame.getContentPane().add(die1);
        frame.getContentPane().add(die2);
        frame.getContentPane().add(die3);
        frame.getContentPane().add(die4);
        frame.getContentPane().add(die5);

        buttons.setBackground(Color.blue);

        die1.setBounds(200, 50, 200, 200);
        die2.setBounds(400, 50, 200, 200);
        die3.setBounds(600, 50, 200, 200);
        die4.setBounds(800, 50, 200, 200);
        die5.setBounds(1000, 50, 200, 200);

        button.setBounds(10, 300, 200, 100);

        frame.setSize(1500, 800);
        frame.setVisible(true);

    }


}

好吧,现在我想要实现的是,当单击标记为“ throw ”的 jbutton 时,我创建的每个标记为 die 1-6 的 jbutton 应该随机显示图像。明白了吗?

我该怎么做,我需要用代码解释...

谢谢。

最佳答案

您不应该使用空布局。相反,您可以使用 Layout Managers 获得不错的 View 。 。您可以阅读更多关于为什么不鼓励这样做的信息 herehere

enter image description here

需要考虑的事情:

  • 此程序不会验证随机数是否相同
  • 图片必须全部为 png 格式
  • 启动时的程序没有图像,但您可以更改它。

产生上述输出的代码是:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.imageio.ImageIO;
import java.io.*;
import java.util.Random;

public class CourseWork2 {
    JFrame frame;
    JButton b1, b2, b3, b4, b5, randomButton;
    JPanel buttonPane, randomPane;

    public void generateRandomImages() {
        try {
            Random rand = new Random();
            int randomNum = 0;
            int numbers[] = new int[5];
            for (int i = 0; i < 5; i++) {
                randomNum = rand.nextInt((5 - 1) + 1) + 1;
                numbers[i] = randomNum;
            }

            Image img = ImageIO.read(getClass().getResource(numbers[0] + ".png"));
            b1.setIcon(new ImageIcon(img));

            img = ImageIO.read(getClass().getResource(numbers[1] + ".png"));
            b2.setIcon(new ImageIcon(img));

            img = ImageIO.read(getClass().getResource(numbers[2] + ".png"));
            b3.setIcon(new ImageIcon(img));

            img = ImageIO.read(getClass().getResource(numbers[3] + ".png"));
            b4.setIcon(new ImageIcon(img));

            img = ImageIO.read(getClass().getResource(numbers[4] + ".png"));
            b5.setIcon(new ImageIcon(img));

            frame.pack();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    CourseWork2() {
        frame = new JFrame("Random Images");
        b1 = new JButton();
        b2 = new JButton();
        b3 = new JButton();
        b4 = new JButton();
        b5 = new JButton();
        randomButton = new JButton("Clic for random images");

        buttonPane = new JPanel();
        randomPane = new JPanel();

        buttonPane.setLayout(new FlowLayout());
        randomPane.setLayout(new FlowLayout());

        buttonPane.add(b1);
        buttonPane.add(b2);
        buttonPane.add(b3);
        buttonPane.add(b4);
        buttonPane.add(b5);
        randomPane.add(randomButton);

        randomButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                generateRandomImages();
            }
        });

        frame.add(buttonPane, BorderLayout.PAGE_START);
        frame.add(randomPane, BorderLayout.CENTER);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String args[]) {
        new CourseWork2();
    }
}

关于java - 如何使用 java swing 在 JButton 上随机显示图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34230265/

相关文章:

java - 如何在忽略转义逗号的同时拆分逗号分隔的字符串?

java - 在 GUI 中更新 JLabel(setText 不工作)

java - 使用 Swing 显示 Java 系统属性

java - 是否有 Java 代码约定的更新版本

java - 以编程方式为 hibernate 提供数据源

尽管代码正确,但 JavaFX 程序无法运行?

java - 使用 Java 通过 http 批量下载图像的好方法

java - 如何禁用 JLabel 背景的颜色?

java - JPanel,调整大小的问题

java - 具有共享 SpinnerModel 的 JSpinners