当前位置: 首页 > 知识库问答 >
问题:

如何在JLabel中显示和计算随机数?

王季萌
2023-03-14

我正在尝试创建一个程序,在这个程序中,我可以计算2个随机生成的数字,并将它们显示在JLabel中。该程序正在Jlabel中成功显示随机数,但它只计算生成的第一组数字。

我希望它能够计算随机生成的所有数字集。

    Random dice = new Random();
    boolean solution;
    JLabel num1,num2,checker;
    int calculation;
    public void repeatLoop() {
        switch(calculation) {
        case 1:
            int addition1 = Integer.valueOf(num1.getText()) + Integer.valueOf(num2.getText());
            break;
        case 2:
            num1.setText("");
            num2.setText("");
            break;
        case 3:
            num1.setText(String.valueOf(1 + dice.nextInt(6)));
            num2.setText(String.valueOf(1 + dice.nextInt(6)));
            break;
        }
            
    }
    
    public JLabel checkerLabel() {
        JLabel checker = new JLabel("");
        checker.setFont(new Font("Tahoma", Font.BOLD, 13));
        checker.setForeground(Color.GREEN);
        checker.setHorizontalAlignment(SwingConstants.CENTER);
        checker.setBounds(163, 21, 109, 23);
        contentPane.add(checker);
        return checker;
    }
    
    public addFrame() {

    
        JLabel num1 = new JLabel("3");
        num1.setHorizontalAlignment(SwingConstants.CENTER);
        num1.setFont(new Font("Tahoma", Font.PLAIN, 20));
        num1.setBounds(122, 101, 63, 32);
        contentPane.add(num1);
        
        JLabel num2 = new JLabel("4");
        num2.setHorizontalAlignment(SwingConstants.CENTER);
        num2.setFont(new Font("Tahoma", Font.PLAIN, 20));
        num2.setBounds(268, 101, 63, 32);
        contentPane.add(num2);
        
        this.num1 = num1;
        this.num2 = num2;
        calculation = 3;
        int addition1 = Integer.valueOf(num1.getText()) + Integer.valueOf(num2.getText());
        JLabel addOperation = new JLabel("+");
        addOperation.setHorizontalAlignment(SwingConstants.CENTER);
        addOperation.setFont(new Font("Tahoma", Font.PLAIN, 20));
        addOperation.setBounds(195, 101, 63, 32);
        contentPane.add(addOperation);
        
        this.checker = checkerLabel();
        
        textField1 = new JTextField();
        textField1.setHorizontalAlignment(SwingConstants.CENTER);
        textField1.setBounds(163, 155, 120, 32);
        contentPane.add(textField1);
        textField1.setColumns(10);

        JButton checkBtn1 = new JButton("Check");
        checkBtn1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                final int addition2 = addition1;
                int ansUser = Integer.parseInt(textField1.getText());
                if(addition2 == ansUser) {
                    solution = true;
                }else {
                    solution = false;
                }
                if(solution == true) {
                    checker.setText("CORRECT");
                    checker.setForeground(Color.GREEN);
                }else {
                    checker.setText("WRONG");
                    checker.setForeground(Color.RED);
                }
                textField1.setText("");
                calculation = 1;
                calculation = 2;
                repeatLoop();
            }
        });
    
    }
}

共有2个答案

岑鸣
2023-03-14

也许你应该在你的开关(计算)结构中的每个case之后添加break

尝试将Switch语句修改为:

switch(calculation) {
   case 1:
        int addition1 = Integer.valueOf(num1.getText()) + Integer.valueOf(num2.getText());
        break;
   case 2:
        num1.setText("");
        num2.setText("");
        break;
   case 3:
        num1.setText(String.valueOf(1 + dice.nextInt(6)));
        num2.setText(String.valueOf(1 + dice.nextInt(6)));
        break;
}
慎建本
2023-03-14

您的代码中有一些逻辑错误。我相信我已经在下面的代码中修复了它们。

我建议您运行下面的代码,以确保它以您想要的方式运行。如果是这样,那么将它与您的代码进行比较,以查看差异。没有很多。这里有一个总结:

  1. 我加入了一个班级成员
  2. 我在方法repeatLoop中的switch语句中添加了一个break语句
  3. 我更改了方法actionPerformed的最后几行

最后,我建议您使用调试器运行原始代码,以了解代码存在逻辑问题的原因。

这是代码。

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Color;
import java.util.Random;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class addFrame extends JFrame {

    private JPanel contentPane;
    private JTextField textField1;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    addFrame frame = new addFrame();
                    frame.setVisible(true);
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    Random dice = new Random();
    boolean solution;
    JLabel num1, num2, checker;
    int calculation;
    int addition1;

    public void repeatLoop() {
        switch (calculation) {
            case 1:
                addition1 = Integer.valueOf(num1.getText()) + Integer.valueOf(num2.getText());
                break;
            case 2:
                num1.setText("");
                num2.setText("");
            case 3:
                num1.setText(String.valueOf(1 + dice.nextInt(6)));
                num2.setText(String.valueOf(1 + dice.nextInt(6)));
        }
    }

    public JLabel checkerLabel() {
        JLabel checker = new JLabel("");
        checker.setFont(new Font("Tahoma", Font.BOLD, 13));
        checker.setForeground(Color.GREEN);
        checker.setHorizontalAlignment(SwingConstants.CENTER);
        checker.setBounds(163, 21, 109, 23);
        contentPane.add(checker);
        return checker;
    }

    public addFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel title3 = new JLabel("ADDITION");
        title3.setForeground(Color.RED);
        title3.setFont(new Font("Verdana", Font.PLAIN, 30));
        title3.setHorizontalAlignment(SwingConstants.CENTER);
        title3.setBounds(108, 47, 224, 32);
        contentPane.add(title3);

        JLabel num1 = new JLabel("3");
        num1.setHorizontalAlignment(SwingConstants.CENTER);
        num1.setFont(new Font("Tahoma", Font.PLAIN, 20));
        num1.setBounds(122, 101, 63, 32);
        contentPane.add(num1);

        JLabel num2 = new JLabel("4");
        num2.setHorizontalAlignment(SwingConstants.CENTER);
        num2.setFont(new Font("Tahoma", Font.PLAIN, 20));
        num2.setBounds(268, 101, 63, 32);
        contentPane.add(num2);

        this.num1 = num1;
        this.num2 = num2;
        calculation = 3;
        addition1 = Integer.valueOf(num1.getText()) + Integer.valueOf(num2.getText());
        JLabel addOperation = new JLabel("+");
        addOperation.setHorizontalAlignment(SwingConstants.CENTER);
        addOperation.setFont(new Font("Tahoma", Font.PLAIN, 20));
        addOperation.setBounds(195, 101, 63, 32);
        contentPane.add(addOperation);

        this.checker = checkerLabel();

        textField1 = new JTextField();
        textField1.setHorizontalAlignment(SwingConstants.CENTER);
        textField1.setBounds(163, 155, 120, 32);
        contentPane.add(textField1);
        textField1.setColumns(10);

        JButton checkBtn1 = new JButton("Check");
        checkBtn1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                final int addition2 = addition1;
                int ansUser = Integer.parseInt(textField1.getText());
                if (addition2 == ansUser) {
                    solution = true;
                }
                else {
                    solution = false;
                }
                if (solution == true) {
                    checker.setText("CORRECT");
                    checker.setForeground(Color.GREEN);
                }
                else {
                    checker.setText("WRONG");
                    checker.setForeground(Color.RED);
                }
                textField1.setText("");
                calculation = 2;
                repeatLoop();
                calculation = 1;
                repeatLoop();
            }
        });
        checkBtn1.setBounds(183, 211, 89, 23);
        contentPane.add(checkBtn1);
        setLocationRelativeTo(null);
    }
}
 类似资料:
  • 问题内容: Java可以显示png,jpg和其他图片格式,但是我必须通过获取文件路径在JLable中显示bmp文件。 ImageIcon支持典型图像。 在我正在工作的项目中,我无法打开bmp文件并以jpg格式存储同一文件,因为我不允许在运行时存储某些内容。我只能将图像保存在内存中。但是我不知道该怎么做。 我怎样才能显示在 ? 谢谢 问题答案: 我发现一些用Java 1.5编写的类,但是您可以轻松更

  • 问题内容: 我在一堂课(名为“欢迎”)中有一个“状态” JLabel,而在另一堂课(名为Timer)中有一个计时器。现在,第一个显示“状态”一词,第二个应该进行倒计时。我想要的样子,但不知道如何显示10、9、8、7 … 0(然后转到下一个窗口)。到目前为止,我的尝试: 和计时器: 问题答案: 我同意您应该考虑按照Anh Pham使用“ Java”计时器,但是实际上,有几个可用的Timer类,并且出

  • 问题内容: 我有一个位于JButton顶部的JLabel,但它不会显示在顶部。注释掉JButton的代码后,将显示JLabel,这意味着它在其中,但在底部。有没有办法在JButton的顶部显示JLabel? 任何帮助都是极好的。谢谢! 编辑: 为了澄清起见,我需要在游戏中使用该按钮,单击该按钮时,按钮上方会显示一个JLabel,以显示添加的“得分”。在我的游戏中,JLabel将比JButton小,

  • 我试图计算随机森林SRC的中位生存率。 我得到了生存功能 我想得到生存函数的中值(值< code >老兵. pred $生存== 0.5,例如,第一行) 问题是,生存函数很少有意义。在我们的例子中,精确到0.5 所以我们有最接近的值

  • 问题内容: 我有一个python代码在名为A的远程计算机上进行一些计算。我通过名为B的计算机通过A连接到A。是否可以在B的计算机上显示图形? 问题答案: 如果在远程计算机(B)上的Mac OS X上使用matplotlib,则必须首先确保使用基于X11的显示后端之一,因为本机Mac OS X后端无法将其图导出到另一个显示。选择后端可以通过 可以通过提供不正确的后端名称来获得受支持的后端列表:mat

  • 问题内容: 我希望在JLabel中垂直显示文本,第一个字母在底部,最后一个字母在顶部。这可能吗? 问题答案: 我找到了以下页面:http : //www.java2s.com/Tutorial/Java/0240__Swing/VerticalLabelUI.htm。 我不知道您是否希望字母彼此“站立”或全部旋转。