从/向多个组合框保存/加载内容

时间:2014-06-11 13:04:46

标签: java swing

我有几个组合框,其中包含一些Pc组件。每个Combobox代表一些特定组件(cpu,gpu,ram等),每个组件由severel atributes(奖品,名称等)确定,只有(组件的)名称在每个组合框中可见。 我需要序列化选定的内容并将其保存到外部.bin文件,从这个文件我应该能够加载以前的选择并将它们设置为选中。至于保存:我从每个Combobox中选择字符串,我将它们添加到ArrayList并序列化它。保存工作(但显然没用)但我无法找到如何从文件中加载值。

2 个答案:

答案 0 :(得分:0)

使用ObjectInputStream从文件中读取序列化对象。请参阅以下示例。

    InputStream fileIS = null;
    InputStream bufferedIS = null;
    ObjectInput objectIS = null;
    try{
        fileIS = new FileInputStream("yourFileName.txt");
        bufferedIS = new BufferedInputStream(fileIS);
        objectIS = new ObjectInputStream(bufferedIS);
        try {
            // cast to List<String> or String or whatever object you are working with
            Object yourObjectOrObjects = objectIS.readObject();
            // do something with your object or objects

        }
        finally{
            objectIS.close();
        }
    }
    catch(ClassNotFoundException cnfe){
        cnfe.printStackTrace();
    }
    catch(IOException ioe){
        ioe.printStackTrace();
    }

答案 1 :(得分:0)

要加载文件的值,您需要使用ObjectInputStream反序列化数组。之后,只需设置组合框的文本

try {
    FileInputStream fis = new FileInputStream("save.bin"); //Your file name
    ObjectInputStream ois = new ObjectInputStream(fis);

    ArrayList<String> values = (ArrayList<String>) ois.readObject();

    ois.close();
    fis.close();
catch (Exception ex) {
    System.out.println(ex); //Handle your exception however you want to
}

修改该代码以读入您的数组或处理您想要的异常。获得数组后,可以很容易地将它们添加回组合框。我建议你在数组或类似的东西中使用组合框,这样你就可以将字符串数组的索引与组合框的索引相关联。没有这样的东西,很难确定哪个字符串在哪里。在我下面写的加载代码中,我假设你的组合框在列表中,所以&#34;值中的第一个字符串&#34; list转到第一个组合框,第n个字符串转到第n个组合框。

for (int i = 0; i < numberOfComboBoxes; i++) {
    comboBoxes.get(i).setSelectedItem(values.get(i));
}

.setSelectedItem将组合框的焦点设置为传递给它的值,如果传递给它的值不在组合框中,则不执行任何操作。

我建议查看javadoc以了解更多信息背后的内容。

http://docs.oracle.com/javase/6/docs/api/javax/swing/JComboBox.html

相关问题