首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TableView的保存和还原状态(列隐藏在JavaFX中,列的宽度)

TableView的保存和还原状态(列隐藏在JavaFX中,列的宽度)
EN

Stack Overflow用户
提问于 2018-01-03 23:38:57
回答 1查看 690关注 0票数 0

简介

在TableView中,我有4列: id、名称、价格、数量。现在,我有3个用户可能希望定制TableView以满足他们的喜好。例如,user1只希望显示3列,并隐藏最后一列,而用户2则希望名称列具有不同的列宽。

问题

如何将TableView的状态(包括其所有列的状态)保存到首选项文件中,并在应用程序开始时加载它们,以便为每个用户恢复自定义视图?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-04 04:23:42

您需要做的第一件事是选择您的存储方法,我建议您使用json或xml,它们都有各自的优点,并且得到了广泛的支持。接下来,您将知道您将存储哪些值。

  1. 所有的列
  2. 所有柱宽
  3. 如果列可见

下面是一个如何存储这些值的示例

JSON

代码语言:javascript
运行
复制
{
    name : {
        width:100,
        showing:false
    },
    id : {
        width:50,
        showing:false
    },
    etc.
}

XML

代码语言:javascript
运行
复制
<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。你必须想办法过滤掉那些不需要的值。

代码语言:javascript
运行
复制
       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);附加

更好的选择是在程序关闭时保存这些值。

代码语言:javascript
运行
复制
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,如下所示

代码语言:javascript
运行
复制
TableColumn example = new TableColumn("example");
example.setId("ExampleID");
System.out.println(example.getId());//will print ExampleId

存储您的值

最后,您需要创建一个类来存储并从存储文件中获取您的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48086685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档