JavaFX 自定义列表单元格,updateItem 被多次调用

2024-05-05

我正在使用一个ListView在 JavaFX 应用程序中。列表中的项目需要的不仅仅是一个字符串来显示它们,所以我做了一个自定义实现ListCell<T>, where T是我正在显示的对象的类。在这个自定义类中,我创建了一个BorderPane在构造函数中并重写updateItem(T item, boolean empty)。这个想法是当updateItem被调用,我将单元格的图形设置为 BorderPane,同时更改一些属性Label就在里面。然而,我注意到updateItem不会被调用一次(例如,当通过滚动回收单元格或添加新项目时),但会调用每时每刻,例如当焦点从一个单元格更改为另一个单元格(即使不滚动)时,或者调整场景大小时,或者按下边框窗格内的按钮时,...

我需要有一个ListView与定制ListCells。我想收到one重用单元格时的回调,将要呈现的新项目作为参数传递。然后我想使用该项目作为模型来构造一个视图控制器对,我将其中的视图用作graphic细胞的。该视图内的按钮和其他控件应该可以工作。这在 JavaFX 中可能吗?

关联问题:

  • ListView 中奇怪的单元格回收 - JavaFX https://stackoverflow.com/questions/20661474/weird-recycle-of-cells-in-listview-javafx
  • 每个单元格中带有按钮的 javafx listview https://stackoverflow.com/questions/23137131/javafx-listview-with-button-in-each-cell(顺便说一句,我已经完成了这个操作,并且按钮回调有效,但是仍然有太多的回调updateItem)

基本思想是细胞很少被构建,但updateItem(...)该方法可能会被频繁调用。无法实际保证该项目在调用之间确实发生了变化updateItem(...)。默认实现updateItem(...)负责处理选择、焦点等,因此如果这些属性中的任何一个发生更改(即使该项目没有更改),可能需要调用此方法。

因此,您应该努力减少updateItem(...)方法。目前尚不清楚多次、频繁的调用是否会阻止您执行您想要的操作(例如,当您将新项目作为参数传递给模型时,请在进行任何更新之前检查它是否与您已有的项目确实不同) 。

我认为updateItem(...)确实有点名不副实:它不仅在以下情况下被调用item已更新,但实际上任何时候单元格都可能需要更新。已经有一种机制仅在以下情况下执行代码:item但变化是:只需向单元格注册一个侦听器itemProperty()。您可以使用这种技术(我通常更喜欢)来创建不同风格的ListCell:

ListView<...> listView = ... ;
listView.setCellFactory(lv -> {
    BorderPane cellRoot = new BorderPane();
    // create nodes, register listeners on them, populate cellRoot, etc...
    ListCell<...> cell = new ListCell<>();
    cell.itemProperty().addListener((obs, oldItem, newItem) -> {
        if (newItem != null) {
            // update cellRoot (or its child nodes' properties) accordingly
        }
    });
    cell.emptyProperty().addListener((obs, wasEmpty, isEmpty) -> {
        if (isEmpty) {
            cell.setGraphic(null);
        } else {
            cell.setGraphic(cellRoot);
        }
    });
    cell.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
    return cell ;
});

这种方法在您的场景中可能效果更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX 自定义列表单元格,updateItem 被多次调用 的相关文章

  • 在列表视图/滚动视图中自动播放视频,类似于 facebook

    如果视图包含视频 我需要视频在列表视图 滚动视图中自动播放 这与 Facebook 非常相似 如果用户向下滚动并且可见区域包含视频 系统将播放视频 如果仍然滚动 则会自动停止该视频 它应该像一次播放一个视频一样工作 有人可以帮我解决这个问题
  • JavaFX 中 ImageView 的顺序转换

    我已经看过了如何在 javafx 2 1 中等待转换结束 https stackoverflow com questions 11188018 how to wait for a transition to end in javafx 2
  • JavaFX 自定义列表单元格,updateItem 被多次调用

    我正在使用一个ListView在 JavaFX 应用程序中 列表中的项目需要的不仅仅是一个字符串来显示它们 所以我做了一个自定义实现ListCell
  • 最大化列表视图中的可见行

    这是我的列表中项目的代码 假设我正在夸大这个TextView进入ListView
  • 如何在 Android 中隐藏列表视图中的项目

    我知道 这个问题以前曾被问过 但我还没有看到有效的答案 有什么办法可以隐藏一些项目ListView不改变源数据 我尝试将项目视图的可见性设置为消失 它不会再显示 但为此项目保留的位置仍然存在 我还设置了 android dividerHei
  • 当用户拖动列表视图项目时检测何时需要滚动

    介绍 我正在实现列表视图项目的重新排列 而不使用 OLE 拖放 PROBLEM 我已经成功解决了大部分任务 除了当用户想要将项目放置在当前不可见的位置时向上 向下滚动之外 问题 我可以使用以下消息向上 向下滚动列表视图 SendMessag
  • 当子列表视图在颤动中到达末尾时,有什么方法可以滚动父列表视图吗?

    假设我有一个可滚动页面 在该页面内我有另一个可滚动列表视图 垂直 所以我希望当子列表视图到达末尾时 可滚动页面开始移动到其末尾 此外 当子列表视图到达顶部时 可滚动页面开始移动到顶部 怎样才能做到这一点 这是我的代码 Widget Fres
  • ListView 中的焦点控件

    上下文 我想要一个不会获得焦点的 ListView 例如不会 当用户触摸它时突出显示该行 然而每个行小部件都有它自己的 OnClickListener 这是我在布局 xml 中指定的内容 android choiceMode none an
  • 如何在样式中访问控件父级的属性

    我的列表视图将项目数据模板化为标签 我正在为该标签设计一种样式 但我不知道如何访问父级的 ListViewItem IsSelected 属性 编辑 尝试了下面的建议 但仍然出现异常 这是我的完整代码
  • 使用反向无限滚动添加到 ListView 时保持滚动位置

    我正在构建一个类似聊天的 Android 应用程序 类似于环聊 为此 我使用垂直 ListViewstackFromBottom true and transcriptMode normal 该列表按从较旧的消息 顶部 到较新的消息 底部
  • 在 Jar 中为 Gluon Scene Builder 11.00 创建自定义控件

    我想在可执行 jar 文件中创建自定义控件 然后在 Gluon Scene Builder 11 00 中使用 我需要知道如何做到这一点 我尝试了几种形式 但在场景生成器中导入 jar 时我的控件没有出现 我正在使用 IntelliJ Co
  • IntelliJ 不会从 Maven 依赖项加载 javafx 包 (JavaFX 17)

    我正在尝试获取一个 Maven JavaFX 项目 该项目是从javafx 原型 fxml原型且未经编辑 可在最新版本的 IntelliJ 中运行 需要明确的是 该项目是该原型的直接复制 我只是想让一个例子起作用 可以说我是 Maven 的
  • JavaFX - Outlook 附件 - DnD

    您好 我需要一个 DnD 解决方案来将 Outlook 邮件附件拖到堆栈窗格中 JavaFX Outlook 2010 stackpaneDragAndDropZone setOnDragOver DragEvent event gt Dr
  • 动态显示/隐藏 Xamarin.Forms.ListView 的页眉或页脚

    有没有一种方法可以根据运行时的条件动态显示 隐藏 ListView 的标题
  • 如何根据 JavaFX 8 中的特定祖先获取节点边界?

    我在 AnchorPane 中添加了一个图表 我想获取其绘图的范围 图表 我用青色标记 这样我就可以在它上面添加一些文本 但我应该根据它的祖先知道它的确切边界 如果我手动执行此操作 则在调整大小等时更改节点的填充大小时 我可能会失败 imp
  • 如何正确处理 ListView 内的 Android EditText 输入?

    在我的应用程序中 我有一个在 a 中添加 删除 编辑记录的活动SortedMap 该活动作为以下活动的延伸实施ListActivity 我已经实现了自定义ArrayAdapter对于收藏品 Every ListView项目 对应于基础记录
  • 在android中从JSON生成listview

    我对 Android 完全陌生 目前正在尝试从从我的服务器中提取的 JSON 数组生成列表视图 我已经阅读了很多教程 但没有运气 有一种独特的方法可以做到这一点 请您指出一些适合开始的资源 我读过了this http www josecgo
  • 如何在 JavaFX 中将 FontAwesome 升级到版本 5

    我有一个使用 FontAwesome 图标的 JavaFX 我想使用新版本 5 但似乎已经不起作用了 这是一个用 Groovy 编写的简单演示应用程序 可与旧版 FontAwesome 一起使用 import javafx applicat
  • 从自定义列表适配器中删除项目

    Problem我有带有复选框的自定义列表适配器视图 我想根据选中的项目删除列表项目 这是我的代码 for int i 0 i
  • Javafx 组合框不会在实时更改时更新下拉列表大小?

    我正在使用 Javafx v8 0 25 b18 我出现的问题是动态组合框的下拉列表的大小不会改变 所以如果我最初在下拉列表中有两个项目 那么下拉列表大小将适合两个项目 但如果我现在用以下内容填充动态组合框三个项目 然后我在里面得到一个小滚

随机推荐

  • 使用 GestureDetector 时出现 NullPointerException

    下面是在发生不同事件时加载两个不同图像的帧动画的代码 第一个事件是在活动开始时 其他的是onTouch 我在哪里利用GestureDetector为了onDown and onScroll 问题是我得到NullPointerExceptio
  • EF7 中的脚手架不再产生“setter”

    我试图将我的个人项目从 Net 6 升级到 7 主要是为了找出重大更改 因此 我预计有些东西需要返工 情况总是如此 如果在某个时候我敢于完成这个项目 那么它就是一个非营利项目 但目前的情况还远未实现 作为现在的上下文 我正在管理一个包含类别
  • 如何在 R 或 MATLAB 中为散点图创建阴影误差条“框”

    我想在 R 或 MATLAB 中创建一个简单的散点图 涉及两个变量 x 和 y 它们有与之相关的错误 epsilon x 和 epsilon y 然而 我不是添加误差线 而是希望在每个 x y 对周围创建一个 阴影框 其中框的高度范围从 y
  • Django 管理员使用 JWT

    Using 姜戈 1 11 Python 3 6 FE 中的 DRF 与 JWT 我知道 Django 管理员使用会话和基本身份验证 到目前为止我所做的 用 AWS Cognito 替换了 Django 管理员身份验证登录页面 用户转到do
  • Vim / vi 生存指南

    基本的 vim 命令有哪些 新用户需要了解什么才能避免陷入麻烦 请每条评论一条命令 我发现不可替代的 因为它也可以在 vi 中使用 与 vim 的视觉模式不同 是标记 您可以用以下标记标记不同的点m 小写 然后是您选择的字母 例如 x 然后
  • 如何使使用 CSS :after 元素创建的文本可选择?

    我正在使用 css 创建文本 after 但我无法选择生成的文本 例如用于复制和粘贴 是否可以使其可选择 div foo div div after content 123 sample http jsfiddle net jfbc4 2
  • 如何将点光源转换为卵形/椭圆形?

    我希望通过具有不同 x 和 y 值的 vec2 半径将当前的圆形光变成椭圆形 有没有办法根据我当前在片段着色器中的代码来做到这一点 uniform struct Light vec4 colour vec3 position vec2 ra
  • SVG/XML 中有一些innerHTML 替代品吗?

    在 HTML 中 我可以通过提供字符串形式的模板来构建一个简单的模板系统 替换其中的某些部分 然后使用innerHTML到某个容器 var templ span myText span var newContent templ replac
  • 如何动态构造方法?

    我设计了一个类 它非常标准 具有一些方法属性 class foo def f1 self print f1 def f2 self print f2 def fn self print fn 现在我想创建一个包含一组 foo 实例的类 cl
  • 是否有用于序列化和反序列化各种格式的对象层次结构的模式?

    给定一个复杂的对象层次结构 幸运的是它不包含循环引用 如何实现支持各种格式的序列化 我不是来讨论实际实施的 相反 我正在寻找可能派上用场的设计模式的提示 更准确地说 我正在使用 Ruby 我想解析 XML 和 JSON 数据以构建复杂的对象
  • Checkstyle 规则防止调用某些方法和构造函数

    是否可以使用 Checkstyle 来禁止使用某些使用系统相关默认值 区域设置 字符集等 的构造函数或方法 我更喜欢强制执行一项政策 程序员应该明确了解系统相关的值 所以我认为以下物品是危险的 all the constructors of
  • 是否需要 AudioServicesDisposeSystemSoundID?

    我最近开始使用 AudioToolbox 框架 并注意到有一个名为AudioServicesDisposeSystemSoundID 只是想知道 调用的时候不调用上面的方法是不是内存泄漏AudioServicesCreateSystemSo
  • TortoiseGit 与 TortoiseSVN 并存?

    我已经使用 TortoiseSVN 好几年了 但我正在考虑慢慢改用 git 因为我真的很喜欢它的分支和合并 我目前正在通过命令行使用 git 但正在考虑安装 TortoiseGit 有人有并排使用两只乌龟的经验吗 这有什么已知的问题吗 我真
  • TensorFlow 未编译为使用 SSE(等)指令,但这些指令是可用的

    我第一次使用一些示例代码运行 TensorFlow 运行代码时我收到以下警告 有谁知道为什么会发生这种情况以及如何解决它 2017 03 31 02 12 59 346109 W c tf jenkins home workspace re
  • 如何使用 Objective C 安全地存储数据? (Mac/可可开发)

    我正在尝试创建我的可可应用程序的试用部分 我已设置所有许可 包括密钥 等 但我想知道如何存储例如用户第一次在安全的地方运行程序的时间 用户无法轻松找到它和 或编辑它 我正在摆弄 NSUserDefaults standardUserDefa
  • CvMat 和 Imread 与 IpImage 和 CvLoadImage

    使用 OpenCv 2 4 我有两个选项来加载图像 1 CvMat and Imread 2 IpImage and CvLoadImage 使用哪一个更好 我尝试将两者混合并最终出现段错误 imread返回一个Mat not CvMat
  • tf.keras.utils.image_dataset_from_directory,但标签来自 csv?

    请告诉我哪里出错了 我正在研究 Kaggle 狗品种分类挑战 我想尝试 one hot 编码与标签编码 图像未在图像目录中拆分 因此我无法将 推断 与 tf keras utils image dataset from directory
  • Android 1.5 在设备上不再显示 Android 应用程序

    我在 Android Market 上的最新更新导致我的应用程序不再适用于 Android 1 5 设备 我更改了以下内容
  • Sequel Pro / MAMP 在哪里存储本地数据库?

    我通过 Sequel Pro 和 MAMP 在我的计算机上创建了一些数据库 并运行 localhost 来查看它们 但是 我全新安装了 Mac OS Lion 但忘记将数据库备份到 sql 文件 我会定期备份文件 并预装计算机的副本 有谁知
  • JavaFX 自定义列表单元格,updateItem 被多次调用

    我正在使用一个ListView在 JavaFX 应用程序中 列表中的项目需要的不仅仅是一个字符串来显示它们 所以我做了一个自定义实现ListCell