使用JAVA代码获取多个JFrame
我知道;这是越来越糟糕,我确实试图想出一个可能的解决办法。基本上,我的程序是打开多个小程序,而它应该只打开一个,并且不显示任何我想要的随机数学问题。这是我得到的代码:使用JAVA代码获取多个JFrame,java,swing,random,jframe,Java,Swing,Random,Jframe,我知道;这是越来越糟糕,我确实试图想出一个可能的解决办法。基本上,我的程序是打开多个小程序,而它应该只打开一个,并且不显示任何我想要的随机数学问题。这是我得到的代码: package RandomMathGame; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class Rando
package RandomMathGame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class RandomMathGame {
public static void main(String[] args) {
RandomProblemGenerator randomProblems = new RandomProblemGenerator(10);
final int numberProblems = 10;
int correctScore = 0;
JPanel panel = new JPanel();
JPanel[] questionPanel = new JPanel[numberProblems];
JPanel mainQuestionPanel = new JPanel();
JPanel mainPanel = new JPanel();
int answer;
int correctAnswer;
JLabel[] mathProblems = new JLabel[numberProblems];
final JTextField[] mathAnswers = new JTextField[numberProblems];
JLabel[] correctYesNo = new JLabel[numberProblems];
final JLabel score = new JLabel(correctScore + "/10");
JButton submit = new JButton("Submit");
mainQuestionPanel.setLayout(new GridLayout(1, 10));
for (int i = 1; i <= numberProblems; i++)
{
final int X = randomProblems.createNumberX();
final int Y = randomProblems.createNumberY();
mathProblems[i] = new JLabel("" + X + " * " + Y + " = ");
mathAnswers[i] = new JTextField();
String answerStr = mathAnswers[i].getText();
if(answerStr.isEmpty()){
correctYesNo[i] = new JLabel("Not a valid answer/answer field empty!");
} else {
answer = Integer.parseInt(mathAnswers[i].getText());
correctAnswer = X * Y;
if (answer == correctAnswer)
{
correctYesNo[i] = new JLabel("Correct answer; good job!");
correctScore = correctScore + 1;
}
else
{
correctYesNo[i] = new JLabel("Incorrect answer; try again!");
}
questionPanel[i].add(mathProblems[i]);
questionPanel[i].add(mathAnswers[i]);
questionPanel[i].add(correctYesNo[i]);
mainQuestionPanel.add(questionPanel[i]);
}
final int temp = correctScore;
submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
score.setText("Score: " + temp + "/10");
}
});
panel.add(submit);
panel.add(score);
mainPanel.setLayout(new GridLayout(1, 2));
mainPanel.add(mainQuestionPanel);
mainPanel.add(panel);
JFrame gameFrame = new JFrame();
gameFrame.setTitle("Random Math Game");
gameFrame.setSize(1000, 1000);
gameFrame.setVisible(true);
gameFrame.setContentPane(mainPanel);
}
}
}
打包游戏;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.*;
公共类随机数学游戏{
公共静态void main(字符串[]args){
RandomProblemGenerator RandomProblemGenerator=新的RandomProblemGenerator(10);
最终整数问题=10;
int校正分数=0;
JPanel面板=新的JPanel();
JPanel[]问题面板=新的JPanel[numberProblems];
JPanel main questionpanel=新的JPanel();
JPanel mainPanel=新的JPanel();
int答案;
正确答案;
JLabel[]mathProblems=新JLabel[numberProblems];
最终JTextField[]mathAnswers=新JTextField[numberProblems];
JLabel[]correctYesNo=新JLabel[numberProblems];
最终JLabel分数=新JLabel(正确分数+“/10”);
JButton submit=新JButton(“提交”);
mainQuestionPanel.setLayout(新的GridLayout(1,10));
对于(int i=1;i多帧是由该for
循环引起的:
for (int i = 1; i <= numberProblems; i++)
{
...
不过,循环中可能仍会抛出ArrayIndexOutOfBoundsException
(至少在我非常简短的实验中是这样)
这意味着您正在请求访问一个不存在的数组索引,例如,您的数组有4个元素长,您需要元素[16]
。如果我冒昧地想解决这个问题,我想它来自I。问题是游戏框架
已创建(并显示)在for循环中。在创建gameFrame
对象之前尝试关闭循环。好吧,这很有帮助…至少我现在没有多个窗口。感谢您提供有关I
final int temp = correctScore;
submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
score.setText("Score: " + temp + "/10");
}
});
} // <- CLOSE THE FOR LOOP HERE
panel.add(submit);