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