想要存储此组合框的值,以便用户不必每次都进行选择。我试图用偏好来做,但价值不是得到商店。我一直得到返回的第一个选择。
如果在运行之间没有存储更改值,则pref PREF_AREA似乎正在正确更新。
这是我的尝试。
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());
}
更新
我也试过了,但它仍然停留在我从组合中选择的第一个值。在进行更改时,似乎不会存储组合的值。
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());
}
答案 0 :(得分:0)
我认为你需要移动comboAREA.setSelectedItem(prefs.get(PREF_AREA, ""));
在myInitComponents
方法
comboAREA.addItem("San Deigo");
comboAREA.addItem("Los Angeles");
comboAREA.addItem("San Francisco");
comboAREA.setSelectedItem(prefs.get(PREF_AREA, ""))
您还在comboAREAActionPerformed
方法中将键值设置为所选项目
comboAREA.setSelectedItem(PREF_AREA); // this is unnecessary
答案 1 :(得分:0)
这与JFormDesigner设置事件顺序的方式有关。
在 setSelectedItem之前和添加项目之前,在init()方法中添加了Action Listener。
组合框的第一项触发动作侦听器,这意味着它将第一项保存为之前选择的项。