有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

运行之间组合框的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());
}

共 (2) 个答案

  1. # 1 楼答案

    我想你需要移动这行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

  2. # 2 楼答案

    这与JFormDesigner设置事件顺序的方式有关

    在添加项之前,在init()方法中添加操作侦听器

    组合框的第一项触发动作侦听器,这意味着它将第一项保存为上一个选定项