首页
学习
活动
专区
工具
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生成虚假手机号身份证号的小工具

    使用Javafx生成虚假手机号身份证号的小工具一、介绍在日常编码中,我们需要生成一些虚假的信息进行测试,其中就包括了手机号,身份证号那么如何生成这些虚假的手机号,和身份证号码呢我打算用javafx来编写一个生成虚假手机号...、虚假身份证号的小工具那么javafx是什么,简单的说,它是一个桌面端工具包集合,用于设计、创建、调试和部署富客户端程序虽然在桌面端不吃香,但比起第一语言就是java的我去学习其他语言来说,仅仅只是开发个小工具...,javafx足够了二、编码1)整体思路及页面布局我打算使用两个Tab,一个手机号、一个身份证号,来回切换在Tab内容中,放入一个按钮,一个表格当我点击按钮的时候,就会在表格中刷新虚假数据,来进行展示表格有两列...setAlignment(Pos.CENTER); } } })); } }可以看到@FXML注解,他可以将fxml文件中指定了fx:id属性的控件...它点击时,会刷新表格,生成新的虚假数据 <

    21950

    手拉手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的顶部和底部区域允许可调整大小的节点占用所有可用宽度。左边界区域和右边界区域占据顶部和底部边界之间的可用垂直空间。默认情况下,所有边界区域尊重子节点的首选宽度和高度。

    17900

    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不会更新EmbeddedStageInterface的x / y 其他 JDK-8208294 使用jrt协议时,安装本机库失败...退出时出现一次崩溃 web JDK-8197987 将libxslt更新为1.1.32版 web JDK-8199474 更新到WebKit的606.1版本 web JDK-8200418 “webPage.executeCommand

    6.7K60

    iOS开发之表视图爱上CoreData

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

    2.2K80

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

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

    1.2K20

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

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

    19700

    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;     } } //数据更新结束调用的代理

    72010

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

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

    1.8K30

    Swift 周报 第三十期

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

    24520

    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.4K40

    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:

    1K40

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

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

    5.1K20

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

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

    1.7K60
    领券