我正在尝试创建一个代码,使用两个包含成绩和单位的组合框来计算学生的GPA。 等级
String [] grade = {"A", "B", "C", "D", "E", "F"};
单元
String[] unit = {"1", "2", "3", "4", "5", "6"};
对于每个课程,将有相应的组合框comboGrade
和comboUnit
组件分别保存数组grade
和unit
的值。鉴于将有10个课程,comboBox grade
和unit
将分别为10个。我使用两个ArrayList
ArrayList<JComboBox> courseGrade;
和ArrayList<JComboBox> courseUnit;
来管理这个,使用以下代码保存10个组合框:
//grade
String[] grades = {"A","B","C","D","E","F"};
courseGrade = new ArrayList<>();
for (int i=0;i<10;i++){
JComboBox comboGrade = new JComboBox(grade);
courseGrade.add(comboUnit); //adds the comboBox to the ArrayList
}
//unit
String[] unit = {"1","2","3","4","5","6"};
courseUnit = new ArrayList<>();
for (int i=0;i<10;i++){
JComboBox comboUnit = new JComboBox(unit);
courseUnit.add(comboUnit); //adds the comboBox to the ArrayList
}
我使用此ItemListener
:
public void itemStateChanged(ItemEvent evt){
String item;
if (evt.getStateChange()==ItemEvent.SELECTED){
item = (String) evt.getItem();
每个comboBox
的,然后将其添加到新的ArrayList
ArrayList<Integer> gradeSelected;
switch (item) {
case "A":
gradeSelected.add(A);
break;
case "B":
gradeSelected.add(B);
break;
case "C":
gradeSelected.add(C);
break;
case "D":
gradeSelected.add(D);
break;
case "E":
gradeSelected.add(E);
break;
case "F":
gradeSelected.add(F);
break;
}
其中A
,B
,C
,D
,E
,F
是表示5,4,3,2的整数常量,分别为1,0
现在这是我的问题......
如果用户DESELECTS SELECTED项目然后从组合框中选择一个新项目怎么办?
//I thought of `ItemEvent.DESLECTED`;
我如何回应此类事件?一旦用户选择了一个项目,就会将其添加到ArrayList
“gradeSelected
”。如何删除已添加的项目并将其替换为完全相同的当前选择
索引作为上一个选择?
或许我正以错误的方式接近这一点。
答案 0 :(得分:0)
我同意Ironluca,在完成所有选择并准备好提交他的选择之前,不要注册用户的输入,因此我认为最好的解决方案是允许您的GUI可更改并且在用户执行导致输入提交的操作之前,不要对任何输入进行绑定。这可以是按下提交按钮,或者尝试前进到GUI的下一个视图或尝试关闭对话窗口。只要它易于为用户识别,这一步骤无关紧要。此时应验证您的数据,程序应根据输入的数据是否被视为有效和完整而继续下一步。
否则,如果您希望能够在取消选择时从集合中删除项目,则可以始终使用堆栈作为您的集合(例如LinkedList),然后在添加或删除堆栈时在堆栈上推送和弹出项目。 / p>
此外,请考虑将您的成绩信息,字母和数字合并到一个枚举中,而不是切换声明。类似的东西:
public enum Grade {
A("A", 5), B("B", 4), C("C", 3), D("D", 2), E("E", 1), F("F", 0);
private String text;
private int value;
private Grade(String text, int value) {
this.text = text;
this.value = value;
}
public String getText() {
return text;
}
public int getValue() {
return value;
}
@Override
public String toString() {
return text;
}
}
然后它可以很容易地使用:
JComboBox<Grade> gradeCombo = new JComboBox<>(Grade.values());
gradeCombo.setSelectedIndex(-1);
JOptionPane.showMessageDialog(null, gradeCombo);
Grade grade = (Grade) gradeCombo.getSelectedItem();
if (grade != null) {
System.out.printf("Grade is %s with a value of %d%n", grade, grade.getValue());
}