为什么不简单地询问用户“你参加了多少测验?” . 在收到用户的这个输入后,只需JPanel
根据用户指定的输入创建一个新的,然后将这个新的呈现JPanel
在 aJOptionPane
中,一步完成,而不是多次询问并用多个JOptionPane
s 烦扰用户。
一个小例子:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class OptionPaneTest {
private int size;
private JTextField[] gradeField;
private void displayGUI() {
size = Integer.parseInt(
JOptionPane.showInputDialog(
"Enter total grades to calculate : "));
System.out.println(size);
JOptionPane.showMessageDialog(null, getPanel(size));
}
private JPanel getPanel(final int size) {
JPanel panel = new JPanel(
new FlowLayout(FlowLayout.LEFT, 5, 5));
JLabel label = new JLabel("Average : ", JLabel.CENTER);
panel.add(label);
gradeField = new JTextField[size];
for (int i = 0; i < gradeField.length; i++) {
gradeField[i] = new JTextField(3);
panel.add(gradeField[i]);
}
gradeField[size - 1].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
int sum = 0;
for (JTextField textField : gradeField) {
if (textField.getDocument().getLength() > 0) {
sum += Integer.parseInt(textField.getText());
}
}
System.out.println("Average : " + (sum / size));
}
});
return panel;
}
public static void main(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
new OptionPaneTest().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
希望您可以根据需要进行修改。它在控制台上提供输出。否则,您可以在其上放置一个JLabel
以向用户JPanel
显示平均值。
但是,令我惊讶的是,程序要求用户输入他/她的成绩。用户是否会真正提供(或会记住过去收集的所有成绩)。明智的做法是,如果您将用户获得的每个成绩放在一个List
或某个其他位置Collection
并简单地对其进行迭代,以找到平均值(尽管这只是我的意见,因为我对您的项目真的不太了解)