我正在尝试创建一个程序,在这个程序中,我可以计算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();
}
});
}
}
也许你应该在你的开关(计算)
结构中的每个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;
}
您的代码中有一些逻辑错误。我相信我已经在下面的代码中修复了它们。
我建议您运行下面的代码,以确保它以您想要的方式运行。如果是这样,那么将它与您的代码进行比较,以查看差异。没有很多。这里有一个总结:
repeatLoop
中的switch
语句中添加了一个break
语句
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。 我不知道您是否希望字母彼此“站立”或全部旋转。