首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

属性更新时的JavaFX TableView排序一致性

JavaFX TableView是JavaFX框架中的一个控件,用于显示和编辑表格数据。当表格中的数据发生变化时,比如属性更新,我们希望保持TableView的排序一致性,即保持表格中的数据按照指定的排序规则进行排序。

为了实现属性更新时的排序一致性,我们可以采取以下步骤:

  1. 确定TableView的排序规则:在TableView中,可以通过调用setSortPolicy方法来设置排序策略。我们可以自定义一个Comparator对象,根据需要的排序规则来实现compare方法。
  2. 监听属性更新事件:当属性发生更新时,我们可以通过监听属性的变化来触发排序操作。在JavaFX中,可以使用ChangeListener来监听属性的变化。当属性发生变化时,我们可以在监听器中调用TableView的sort方法来重新排序表格数据。
  3. 更新表格数据:在属性更新事件中,我们可以根据需要更新表格中的数据。可以通过修改数据模型中的属性值,或者直接替换数据模型来实现更新。
  4. 刷新TableView:在更新表格数据后,我们需要调用TableView的refresh方法来刷新表格视图,以确保更新后的数据正确显示在表格中。

下面是一个示例代码,演示了如何实现属性更新时的排序一致性:

代码语言:java
复制
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;

public class TableViewSortingExample extends Application {

    public static class Person {
        private StringProperty name;
        private StringProperty age;

        public Person(String name, String age) {
            this.name = new SimpleStringProperty(name);
            this.age = new SimpleStringProperty(age);
        }

        public StringProperty nameProperty() {
            return name;
        }

        public StringProperty ageProperty() {
            return age;
        }
    }

    @Override
    public void start(Stage primaryStage) {
        TableView<Person> tableView = new TableView<>();
        ObservableList<Person> data = FXCollections.observableArrayList(
                new Person("John", "25"),
                new Person("Alice", "30"),
                new Person("Bob", "20")
        );

        TableColumn<Person, String> nameColumn = new TableColumn<>("Name");
        nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

        TableColumn<Person, String> ageColumn = new TableColumn<>("Age");
        ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));

        tableView.getColumns().addAll(nameColumn, ageColumn);
        tableView.setItems(data);

        // 设置排序策略
        tableView.setSortPolicy(tv -> {
            // 获取排序列
            ObservableList<TableColumn<Person, ?>> sortOrder = tableView.getSortOrder();
            if (sortOrder.isEmpty()) {
                return true;
            }

            // 获取排序规则
            TableColumn.SortType sortType = sortOrder.get(0).getSortType();
            Comparator<Person> comparator = (p1, p2) -> {
                int result = p1.nameProperty().get().compareToIgnoreCase(p2.nameProperty().get());
                return sortType == TableColumn.SortType.ASCENDING ? result : -result;
            };

            // 对数据进行排序
            FXCollections.sort(data, comparator);
            return true;
        });

        // 监听属性更新事件
        data.forEach(person -> {
            person.nameProperty().addListener((observable, oldValue, newValue) -> {
                // 更新表格数据
                tableView.refresh();
            });
        });

        Scene scene = new Scene(tableView);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

在这个示例中,我们创建了一个包含姓名和年龄的Person类作为数据模型。通过设置TableView的排序策略,我们实现了按照姓名进行排序。在监听属性更新事件时,我们调用了TableView的refresh方法来刷新表格视图。

腾讯云提供了一系列与云计算相关的产品,包括云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以根据实际需求和使用场景来选择,可以参考腾讯云官方文档或咨询腾讯云的客服人员获取更详细的信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Using JavaFX UI Controls 12 Table View

单元工程通过使用PropertyValueFactory类来实现, 表格列firstName, lastName和email 属性来引用Person中相应属性 。...因为ObservableList 对象能够跟踪表格元素任何变化,当其中数据变化,TableView 内容也自动更新。...图 12-6新添加实体 列数据排序 TableView类提供了列中数据排序。用户可以通过点击列头来对数据进行排序。第一次点击将进行升序排列,第二次点击将进行降序排列。第三次点击不排列。...用户可以对表格多列进行排序,同样也可以指定每列数据在排序操作中优先级。如果想多行排列,用户按住Shift同时点击想要排序每一列列头。...setOnEditCommit 方法具有编辑 指派更新数据到相应表格单元格能力。

11.4K20
  • 手拉手JavaFX场景

    JAVAFXjdk1.8以上引入javafx类库JDK11+JAVAFX(eclipse)方式一方式二直接引入避免​另一种编写方式小知识点setHgrow或setVgrow、需要精确布局,应重写layoutChildren...()值摆放每一个子节点setHgrow(hbox,Priority.ALWAYS);javafx有4中控件来表示多项数据ListView:列表TreeView:树TableView:表格TreeTableView...static Stage stage; @Override public void start(Stage stage) throws Exception { //让舞台赋值给静态属性...:"+Thread.currentThread().getName()); //可以在这里更新组件 } }); }}screen类public class...BorderPane顶部和底部区域允许可调整大小节点占用所有可用宽度。左边界区域和右边界区域占据顶部和底部边界之间可用垂直空间。默认情况下,所有边界区域尊重子节点首选宽度和高度。

    16500

    JavaFX 11发行说明

    使用jlink创建最小jdk映像,Swing interop失败 使用包含JavaFX 11 jmods包中javafx.swing模块jlink创建最小Java映像将无法运行FX / Swing...控制 JDK-8157690 [TabPane]排序选项卡使选项卡选择菜单为空 控制 JDK-8165459 HTMLEditor:意外禁用剪贴板工具栏按钮 控制 JDK-8185854 具有自定义外观...,DateCell文本颜色未正确更新 控制 JDK-8208610 在FXMLLoader :: getDefaultClassLoader中调用类错误检查 FXML JDK-8129582 在Linux...其他 JDK-8207794 FXCanvas被重新定义,FXCanvas不会更新EmbeddedStageInterfacex / y 其他 JDK-8208294 使用jrt协议,安装本机库失败...退出出现一次崩溃 web JDK-8197987 将libxslt更新为1.1.32版 web JDK-8199474 更新到WebKit606.1版本 web JDK-8200418 “webPage.executeCommand

    6.6K60

    iOS开发之表视图爱上CoreData

    ,在点击添加按钮首先得通过上下文获取我们实体对象,获取完实体对象后再给实体对象属性赋上相应值,最后调用上下文save方法来存储一下我们实体对象。...来修改或着添加数据TableView内容是不跟着CoreData变化而变化,接下来要做就是要绑定TableView和CoreData关系。...更新数据通过点击相应cell,把cell上数据传到UpdateView页面上,然后进行更新即可。     ...1.把更新页面删掉,做如下修改,点击添加和修改都跳转到我们编辑页面,同时添加一个自定义Button,点击Button,我们会调用ImagePickerController来从手机相册获取图片: ?...自己tableView中,所以加载cell要进行相应选择,search中cell是我们自定义cell, 选择代码如下: 1 //根据不同tableView来设置不同cell模板

    2.2K80

    PyQt5数据库开发1 4.3 QSqlTableModel④下部

    建立tableview与右侧组件关联当前无关联当前tableview里面选择某个行,右侧是无反应添加关联代码插入同时import若干新模块运行程序发现右边groupbox出现第一条数据。...,限制tableView在__init__函数中限制运行程序,发现没法选多行了排序排序下拉框没内容当前这个下拉框里面是没东西,运行时候点没反应补充相关函数和调用运行程序,发现排序下拉框有内容了排序下拉框信号与槽添加槽函数...注意要在前面写上@pyqtSlot(int),说明其参数为int类型运行程序换一种排序方式升序和降序两个单选按钮信号与槽函数降序添加槽函数运行测试升序降序功能数据过滤添加槽函数测试过滤功能发现bug原因是这些按钮在数据库没打开不应该能按...排序相关功能也有类似的错误去Qt修改将groupBoxSortenabled属性里面的勾去掉同样,将groupBoxFilter相关属性也去掉保存,退出qt在Eric6工程目录下运行批处理文件或者将...form文件拷贝到Eric6工程目录,然后在Eric6下编译form(因为改动没有涉及资源,所以直接在eric6下编译form就行了)运行程序现在数据库没打开排序和过滤相应按钮都没法按了添加代码,让数据库打开

    18600

    UITableView进阶:常用代理方法及属性1. 常用属性2. 进阶常用代理方法

    如果有幸去瞄一眼,可以通过文章下面的拓展链接传送门去看。& 今天重点聊一聊UITableView中经常使用到代理方法及属性。本文不是工具箱,所以不会将所有的属性和方法都写下来噢。...在某种情况下,我们希望点击cell时候不需要做出任何反应,就可以修改这个属性。 allowsMultipleSelection:需要进行多行选择时候就要将此设置为YES。...这个属性也是一个数组,它装着目前屏幕上可见cellindexPath集合。在做两级菜单联动时候可能会需要用到。 2....*)indexPath 2.3 拖拽排序模式 重要:开启支持拖拽排序前提是:开启支持编辑模式。...]; // 刷新全部表格数据,如果能够准确确定被修改数据行,就不要用此方法 [tableView reloadData]; #4. tableViewCell排序 ##4.1 cell交换排序 -

    1.1K20

    iOS中CoreData数据管理系列四——进行数据与页面的绑定

    NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:@"SchoolClass"];     //设置数据排序...fecCon.delegate=self;     //进行数据查询     [_fecCon performFetch:nil]; } @end 用于初始化NSFecthedResultsController数据请求对象必须设置一个排序规则...{     //开启tableView更新预处理     [[self tableView] beginUpdates]; } //分区数据改变时调用方法 - (void)controller:(NSFetchedResultsController...        case NSFetchedResultsChangeUpdate:             break;     } } //数据改变回调代理 - (void)controller...insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];             break;     } } //数据更新结束调用代理

    71010

    PyQt5数据库开发1 4.3 QSqlTableModel 之 相关槽函数实现(多图长文详解)

    发现tableView可以选择多行 7. 添加代码,限制tableView 8. 运行程序,发现没法选多行了 三、排序 1. 排序下拉框没内容 2. 补充相关函数和调用  3....添加代码,让数据库打开排序和过滤功能能用 7. 运行程序 五、工具按钮状态 1. 当前工具按钮状态 2. 添加改变按钮状态代码  3. 运行程序 六、涨工资按钮 1. 涨工资代码 2....发现bug 原因是这些按钮在数据库没打开不应该能按。排序相关功能也有类似的错误 4....去Qt修改 将groupBoxSortenabled属性里面的勾去掉  同样,将groupBoxFilter相关属性也去掉  保存,退出qt   在Eric6工程目录下运行批处理文件或者将...运行程序 现在数据库没打开排序和过滤相应按钮都没法按了 6. 添加代码,让数据库打开排序和过滤功能能用 在opentable函数最后加入如下代码 7.

    1.7K30

    JavaFX 11 发布,与 JDK 拆分后首个正式大版

    此次更新主要内容如下: 重要更新JavaFX 模块指定:因为 JDK 不再包含 JavaFX,那么必须明确包含应用程序使用 JavaFX 模块,详情见:https://openjfx.io/openjfx-docs...在 JavaFX 11 中修改值步骤之前,必须在 Spinner 控件箭头按钮上按下鼠标一段默认持续时间,JavaFX 11 中已添加两个新属性“initialDelay”和“repeatDelay”来配置此操作...默认 GTK 版本从 v2 更新为 v3。将在存在 gtk3 库 Linux 平台上使用 GTK 3。...此外公告还提供了关于以下一些常见问题解决方案: OpenJDK 11 环境下,JavaFX 在 Ubuntu 18.04 上启用 Wayland 崩溃。...使用 jlink 创建小 jdk 映像,Swing interop 失效。 详情查看 更新日志 。下载地址:https://openjfx.io/index.html

    2.3K40

    Swift 周报 第三十期

    更新将分多个阶段完成,新 App 和 App 更新可能会受影响,具体取决于它们验证收据方式。...不可否认,这在某种程度上是有限实用性,因为对此类协议所有一致性也必须在同一功能内。但是,也没有理由人为地限制开发人员在函数中创建模型复杂性。...动机 在某些情况下,人们希望能够移动和排序元素,同时不允许(或限制)元素突变。鉴于大量不太重要收集协议,这是一个值得注意遗漏。...通过在类型上使用 @dynamicMemberLookup 属性,我们可以重载该类型 subscript 方法来更方便地访问其数据。但是,这也意味着缺乏编译安全性。...为了解决这个问题,本文提到了使用 KeyPath 作为参数 subscript 方法来实现编译安全检查。

    23420

    2017年3月Java9带来革新!

    110: HTTP 2 Client 143: 改进竞争锁 158: 统一JVM日志 165: 编译器控制 193: 变量处理保证一致性 197: 分段代码缓存 199: 智能化编译,第2阶段 200...Javadoc 225: Javadoc搜索 226: UTF-8属性文件 227: Unicode 7.0 228: 增加更多诊断命令 229: 默认创建 PKCS12 秘钥库 231: 移除启动对...JRE版本选择 232: 改进应用安全性能 233: 自动生成运行时编译器测试用例 235: 测试 javac 生成 class 文件属性 236: 为 Nashorn 提供解析API:(译注:Nashorn...) 253: 为 JavaFX UI 控件和 CSS API 实现模块化 254: 压缩字符串 255: 将选择 Xerces 2.11.0 更新到 JAXP中 256: BeanInfo 注解 257...: 将 JavaFX/Media 更新更新版本 GStreamer 258: HarfBuzz 字体布局引擎 259: 栈遍历 API 260: 封装大部分内部 API 261: 模块系统 262:

    98840

    Realm数据库 从入门到“放弃”

    7.查 在Realm中所有的查询(包括查询和属性访问)在 Realm 中都是延迟加载,只有当属性被访问,才能够读取相应数据。...Realm 会自行检测新增和需要移除属性,然后自动更新硬盘上数据库架构。...由于使用Realm的话就无法使用Core DatafetchedResultController,那么如果数据库更新了数据,是不是只能通过reloadData来更新tableview了?...解决办法: 通过调用invalidate,来告诉 Realm 您不再需要那些拷贝到 Realm 数据了。这可以使我们不必跟踪这些对象中间版本。在下次出现新版本,再进行版本更新。...由于Realm是基于零拷贝,所有对象都在内存里,所以会自动更新。如果允许Realm对象在线程间共享,Realm 会无法确保数据一致性,因为不同线程会在不确定什么时间点同时改变对象数据。

    5K20

    你可能需要为你 APP 适配 iOS 11

    本文介绍iOS11中在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目前APP带来异常bug 前言 前几天发现在做APP在 iOS11 系统上动画有异常,在其他系统设备上都是正常...,动画操作是观察tableViewcontentOffset变化后执行,异常动画发生在tableView reloadData之后,也就是说tableView reloadData之后,tableView...个数再加上几个,滑动tableView不停地得到新cell,更新自己contenSize,在滑到最后时候,会得到正确contenSize。...,如果是有动画是观察这两个属性变化进行,就会造成动画异常,因为在估算行高机制下,contentSize值是一点点地变化更新,所有cell显示完后才是最终contentSize值。...总结 大概介绍了iOS 11UI方面的一些更新,大部分内容都用代码测试过了,有些更新确实是很实用,可以适配下iOS 11,有的更新可能会给现有APP造成bug,所以学习下这些内容还是很有必要

    1.7K60

    你可能需要为你 APP 适配 iOS11

    本文介绍了iOS11在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目前APP带来异常bug。...之后,也就是说tableView reloadData之后,tableViewcontentOffset发生了几次变化。...个数再加上几个,滑动tableView不停地得到新cell,更新自己contenSize,在滑到最后时候,会得到正确contenSize。...属性,在iOS11环境下就要注意了,因为开启Self-Sizing之后,tableView是使用estimateRowHeight属性,这样就会造成contentSize和contentOffset...值变化,如果是有动画是观察这两个属性变化进行,就会造成动画异常,因为在估算行高机制下,contentSize值是一点点地变化更新,所有cell显示完后才是最终contentSize值。

    2.5K00
    领券