好吧,基本上我已经创建了 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 。 。您可以阅读更多关于为什么不鼓励这样做的信息 here和 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/