在运行之间存储组合框的值

时间:2018-02-01 05:52:10

标签: java swing preferences

想要存储此组合框的值,以便用户不必每次都进行选择。我试图用偏好来做,但价值不是得到商店。我一直得到返回的第一个选择。

如果在运行之间没有存储更改值,则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());
}

2 个答案:

答案 0 :(得分:0)

我认为你需要移动comboAREA.setSelectedItem(prefs.get(PREF_AREA, ""));

myInitComponents方法

中将项目添加到comboBox后
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。

组合框的第一项触发动作侦听器,这意味着它将第一项保存为之前选择的项。