运行之间组合框的java存储值
在中,您希望存储此组合框的值,以便用户不必每次都进行选择。我正在尝试使用首选项来实现它,但其价值并没有得到存储。我一直得到第一个选择返回
当值更改时,pref pref_区域似乎得到了正确的更新,只是在运行之间没有存储
这是我的尝试
public void myInitComponents() {
// Set default value from prefs for Directory
Preferences prefs = Preferences.userNodeForPackage(JFrameTest.class);
// Set default value for AREA
final String PREF_AREA = "Select AREA";
comboAREA.setSelectedItem(prefs.get(PREF_AREA, ""));
// Set AREA Options
comboAREA.addItem("San Deigo");
comboAREA.addItem("Los Angeles");
comboAREA.addItem("San Francisco");
}
private void comboAREAActionPerformed(ActionEvent e) {
Preferences prefs = Preferences.userNodeForPackage(JFrameTest.class);
final String PREF_AREA = "Select AREA";
prefs.put(PREF_AREA, comboAREA.getSelectedItem().toString());
comboAREA.setSelectedItem(PREF_AREA);
System.out.println(comboAREA.getSelectedItem().toString());
}
更新
我也尝试过,但它仍然停留在我从组合中选择的第一个值上。在进行更改时,它似乎没有存储combo的值
public void myInitComponents() {
// Set default value from prefs for Directory
Preferences prefs = Preferences.userNodeForPackage(JFrameTest.class);
// Set default value for AREA
final String PREF_AREA = "Select AREA";
// Set AREA Options
comboAREA.addItem("San Deigo");
comboAREA.addItem("Los Angeles");
comboAREA.addItem("San Francisco");
comboAREA.setSelectedItem(prefs.get(PREF_AREA, ""));
}
private void comboAREAActionPerformed(ActionEvent e) {
Preferences prefs = Preferences.userNodeForPackage(JFrameTest.class);
final String PREF_AREA = "Select AREA";
prefs.put(PREF_AREA, comboAREA.getSelectedItem().toString());
System.out.println(comboAREA.getSelectedItem().toString());
}
# 1 楼答案
我想你需要移动这行
comboAREA.setSelectedItem(prefs.get(PREF_AREA, ""));
在
myInitComponents
方法中将项目添加到comboBox之后您还将键值设置为
comboAREAActionPerformed
方法中的选定项comboAREA.setSelectedItem(PREF_AREA); // this is unnecessary
# 2 楼答案
这与JFormDesigner设置事件顺序的方式有关
在添加项之前,在init()方法中添加操作侦听器
组合框的第一项触发动作侦听器,这意味着它将第一项保存为上一个选定项