简介
在TableView中,我有4列: id、名称、价格、数量。现在,我有3个用户可能希望定制TableView以满足他们的喜好。例如,user1只希望显示3列,并隐藏最后一列,而用户2则希望名称列具有不同的列宽。
问题
如何将TableView的状态(包括其所有列的状态)保存到首选项文件中,并在应用程序开始时加载它们,以便为每个用户恢复自定义视图?
发布于 2018-01-04 04:23:42
您需要做的第一件事是选择您的存储方法,我建议您使用json或xml,它们都有各自的优点,并且得到了广泛的支持。接下来,您将知道您将存储哪些值。
下面是一个如何存储这些值的示例
JSON
{
name : {
width:100,
showing:false
},
id : {
width:50,
showing:false
},
etc.
}XML
<properties>
<name>
<width>100</width>
<showing>false</showing>
</name>
<id>
<width>50</width>
<showing>true</showing>
</id>
etc.
</properties>接下来,当和如何获取列值时,如果您希望它们不断更新(不推荐),它报告每个数字,例如从1到50,它将报告1,2,3.50。你必须想办法过滤掉那些不需要的值。
public void changelistener(final TableColumn listerColumn) {
listerColumn.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
propertyStore.storeWidth(listerColumn.getText(),t1);//when the values are stored
}
});
}通过执行changelistener(YourColumn);附加
更好的选择是在程序关闭时保存这些值。
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent we) {
for(int i = 0; i<tv.getColumns().size();i++)
{
TableColumn x = (TableColumn) tv.getColumns().get(i);
propertyStore.storeWidth(x.getText(),x.getWidth());
propertyStore.storeVisible(x.getText(),x.isVisible());
//other option
propertyStore.storeWidth(x.getId(),x.getWidth());
propertyStore.storeVisible(x.getId(),x.isVisible());
}
}
});如果使用getId(),则需要为每个列设置一个Id,如下所示
TableColumn example = new TableColumn("example");
example.setId("ExampleID");
System.out.println(example.getId());//will print ExampleId存储您的值
最后,您需要创建一个类来存储并从存储文件中获取您的值。
https://stackoverflow.com/questions/48086685
复制相似问题