- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个带有按钮的 GUI 程序,当您单击它时,您可以将骰子从 1 掷到 6,然后会出现骰子的图像。但是当我尝试生成 1 到 6 之间的数字时,出现错误,提示无法找到符号。
int rolledNumber = random.nextInt(max - min + 1) + min;
我已经将 max 和 min 声明为 6 和 1。
我在尝试获取 1 到 6 之间的随机整数的部分也遇到了错误。而且我用来打开图像的代码似乎是错误的。
`
img = ImageIO.read(new File("dice 1.jpeg"));
这是我的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Random;
public class Butttin {
public static void main(String[] args) {
JFrame frame = new JFrame("Rolling Dice Game");
JPanel panel = new JPanel();
JButton buttonRoll = new JButton("Roll!");
buttonRoll.addActionListener(new buttonRoll());
panel.setLayout(new GridLayout(5, 2, 5, 5));
frame.setVisible(true);
frame.setSize(500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.pack();
}
private static class buttonRoll implements ActionListener {
public void actionPerformed(ActionEvent event) {
int max = 6;
int min = 1;
int rolledNumber = random.nextInt(max - min + 1) + min;
String command = event.getActionCommand();
if (command == "Roll!") {
if (rolledNumber == 1) {
JLabel die = new JLabel();
img = ImageIO.read(new File("dice 1.jpeg"));
} else if (rolledNumber == 2){
JLabel die = new JLabel();
img = ImageIO.read(new File("dice 2.jpg"));
} else if (rolledNumber == 3){
JLabel die = new JLabel();
img = ImageIO.read(new File("dice 3.jpg"));
} else if (rolledNumber == 4){
JLabel die = new JLabel();
img = ImageIO.read(new File("dice 4.jpg"));
} else if (rolledNumber == 5){
JLabel die = new JLabel();
img = ImageIO.read(new File("dice 5.jpg"));
} else if (rolledNumber == 6){
JLabel die = new JLabel();
}
return die;
}
}
}
}
最佳答案
random
不是有效的类或变量,我认为您的意思是 java.util.Random
,您需要声明变量并创建其实例。 ..
private static class ButtonRoll implements ActionListener {
private java.util.Random random = new java.util.Random();
接下来,if (command == "Roll!") {
不是在 Java 中比较 String
的方式,您应该使用 String#equals
,例如if ("Roll!".equals(command)) {
接下来,img = ImageIO.read(new File("dice 1.jpeg"));
也遇到了同样的问题。 img
未定义。此外,ImageIO.read
会抛出一个您未处理的IOException
。请参阅JavaDocs具体内容
接下来,您将在本地上下文中向 if
语句声明 die
if (rolledNumber == 1) {
JLabel die = new JLabel();
img = ImageIO.read(new File("dice 1.jpeg"));
} else if (rolledNumber == 2) {
JLabel die = new JLabel();
这意味着当您尝试使用 return
die 时,
die` 是未定义的。确保您在上下文级别声明您想要在以下位置使用它:
int rolledNumber = random.nextInt(max - min + 1) + min;
String command = event.getActionCommand();
JLabel die = null;
if ("Roll!".equals(command)) {
if (rolledNumber == 1) {
die = new JLabel();
img = ImageIO.read(new File("dice 1.jpeg"));
} else if (rolledNumber == 2) {
请注意,我认为您不想创建 JLabel
,而是更改预先存在的标签的 icon
属性...
最后,ActionListener#actionPerformed
没有定义返回类型(它被定义为 void
),这意味着 return die;
是非法的声明...
您必须找到某种方法来允许 buttonRoll
类更新 UI
另外,为什么我要剖析你的代码,你真的应该确保你只在事件调度线程的上下文中创建和修改你的 UI,请参阅 Initial Threads了解更多详情
因为我知道它即将到来......
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Butttin {
public static void main(String[] args) {
new Butttin();
}
public Butttin() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private JLabel output;
private JButton roll;
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
output = new JLabel("-");
add(output, gbc);
roll = new JButton("Roll");
add(roll, gbc);
roll.addActionListener(new RollActionListener(output));
}
}
public class RollActionListener implements ActionListener {
private JLabel label;
private Random random = new Random();
public RollActionListener(JLabel label) {
this.label = label;
}
@Override
public void actionPerformed(ActionEvent e) {
int max = 6;
int min = 1;
int rolledNumber = random.nextInt(max - min + 1) + min;
label.setText(Integer.toString(rolledNumber));
}
}
}
关于java - GUI编程和上传图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28620097/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!