gpt4 book ai didi

java - GUI编程和上传图像?

转载 作者:行者123 更新时间:2023-12-02 04:57:37 25 4
gpt4 key购买 nike

我正在尝试制作一个带有按钮的 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();

这意味着当您尝试使用 returndie 时,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com