列表框(JList)不会从自定义 ListModel 动态更新

2023-12-01

我正在使用 Seesaw 在 Clojure 中开发 GUI 应用程序,并且在我的自定义 ListModel 更新时无法更新列表框(Java 中的 JList)。

这是我的一些代码:

(deftype ActionHistoryListModel
  [^{:unsynchronized-mutable true} listeners
   ^{:unsynchronized-mutable true} listening-to]

  ListModel
  (addListDataListener [this listener]
    (set! listeners (conj listeners listener)))
  (removeListDataListener [this listener]
    (set! listeners (remove #(= % listener) listeners)))
  (getSize [this] 
    (get-in (deref listening-to) [:count]))
  (getElementAt [this index]
    (get-in (deref listening-to) [:actions index]))

  ActionHistoryListModelProtocol
  (listen-to [this r]
    (do
      (set! listening-to r)
      (add-watch r this (fn [_ _ _ new-state] (.notify this new-state)))))
  (notify [this new-state]
    (let [action ((meta new-state) :last-action)
          const  (cond
            (= action :create) INTERVAL_ADDED
            (= action :update) CONTENTS_CHANGED)
          index  (last ((meta new-state) :action-target))
          event  (ListDataEvent. this const index index)
          notification (cond
            (= action :create) #(.intervalAdded % event)
            (= action :update) #(.contentsChanged % event))
          ]
      (. (.. System out) print (str "Index: " index "\n" "Event: " event "\n"))
      (map #(invoke-later (notification %)) listeners)))
  )

(defn make-action-history-list-model []
  (ActionHistoryListModel. #{} nil))

(def ahlm (make-action-history-list-model))
(.listen-to ahlm action-history)

(def undo-list (listbox :model ahlm))

; then put list in frame...

where action-history is a ref.

它已经到了应该更新列表的地步,因为System.out.print正在发生,但列表框不想更新

关于可能出什么问题有什么想法吗?是否与使用 EDT 和手表回调的混合有关?

如果需要更多代码,请告诉我。


自定义模型总是很棘手,尤其是在事件通知方面,因此很难说它的效果如何。也就是说,我对为什么没有通知的最好猜测是您使用map这是懒惰的,即你的最后一个形式notify方法实际上并没有做任何事情。试试这个:

(doseq [listener listeners] 
  (invoke-later (notification listener)))

祝你好运。

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

列表框(JList)不会从自定义 ListModel 动态更新 的相关文章

  • Java Swing JEditorPane:操作样式文档

    我的模型是与枚举类型关联的字符串队列 我试图在 JEditorPane 中显示该模型 队列中的每个元素作为一个单独的 HTML 段落 其属性基于关联的枚举类型 但是 我的更新方法并没有达到我想要的效果 我尝试将 HTML 字符串直接写入文档
  • 何时何地调用 EventQueue.invokeLater() 方法

    我对线程和 GUI 完全陌生 因此我不知道在哪里调用它EventQueue invokeLater 方法 我应该在每个事件监听器和其他东西中调用它吗 调用这个方法的 东西 是什么 如果是这样 是否有任何替代方法来调用一次应用到处方法 以便不
  • 在拇指上方显示修改后的 JSlider 值

    有没有一种简单的方法可以在使用某些 外观和感觉 的同时更改 JSlider 上方标签中显示的值 为了清楚起见 我正在谈论这个值 具体来说 我想显示除以 1000 的值而不是值本身 我知道如果我显示它们 我可以为刻度设置标签 但用户将不得不猜
  • Java 中 .NET 的 Lambda 表达式

    我最近 再次 从 C 迁移到 Java 但我非常怀念 lambda 表达式和 C 的 IEnumerable Foreach 之类的东西 所以我正在寻找Java中的lambda表达式库 有比这更好的图书馆吗LambdaJ http code
  • 在 JMapViewer 中绘制折线 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 Java 中的 OpenStreetMap 和 JMapViewer 进行工作 我可以使用JMapViewer绘制多边形和矩形
  • Java swing - 单击时执行操作

    我想我已经把自己逼到了一个角落里 我正在尝试使用 java swing 来做一些事情 单击 下一步 按钮时 从文件中加载新行 通过行索引号 然后如果文件中该行的日期尚未到达 则使 下一个 按钮变灰 我的问题是 当我有以下代码时 Scanne
  • Swing - 是否可以在 JTable 单元格中设置“特定”文本的字体颜色?

    我有一个 JTable 其中一列按以下格式显示值 423545 50 7568787 50 53654656 2021947 50 021947 2021947 50 8021947 50 我想知道是否可以用红色显示方括号内的值 在过去的几
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 如何避免 mouseExited 在任何嵌套组件上触发

    在我的代码中我有 扩展 JComponent 的抽象类 其中包含一些 JTextField JTextField 不可编辑 JComponent 类实现 MouseListener 当 mouseEntered 事件触发时 将添加一个边框
  • java swing:向 JTree 项目添加自定义图形按钮

    我想在 JTree 中的项目右侧添加一个带有小图标的附加按钮 这可以做到吗 如果是这样 怎么办 thanks Clamp 你在这方面成功了吗 我想做同样的事情 但很难让 JButton 响应用户 设置渲染器以显示按钮的过程很顺利 但所有鼠标
  • Java - ZUI(可缩放用户界面)

    我目前正在做一个小型个人项目 需要显示极其大量的数据 我突然想到实现一种可缩放的用户界面 以允许用户在大量数据中导航 我知道现有的项目 例如ZVTM http zvtm sourceforge net and 短笛2d https code
  • SwingWorker 在 Unsafe.park() 处挂起

    我有一个SwingWorker与后台服务器通信 然后更新JFrame 我正在调试我的应用程序并注意到即使在SwingWorker完成了它的工作 它的线程仍然存在 它挂在Unsafe park java lang Object 这是一个本机方
  • Java JPanel 绘制形状

    我第一次使用 JPanel 并在 JPanel 上绘制基本形状 我已经为这样的形状编写了代码 public class Shape extends JPanel int x y public Shape int x int y this x
  • Clojure 中的快速素数生成

    我一直在努力解决欧拉计划 https projecteuler netClojure 中的问题得到了改善 我已经遇到过几次素数生成问题 我的问题是它花费的时间太长了 我希望有人能帮助我找到一种有效的方法 以 Clojure 的方式做到这一点
  • Clojure实现多线程的最佳方法?

    我正在开发一个用 Clojure 编写的 MUD 客户端 现在 我需要两个不同的线程 一种接收用户的输入并将其发送到 MUD 通过简单的套接字 另一种读取 MUD 的输出并将其显示给用户 我应该只使用 Java 线程 还是应该使用一些特定于
  • 将 JPanel 添加到 JFrame

    我有一个程序 其中将 JPanel 添加到 JFrame public class Test Test2 test new Test2 JFrame frame new JFrame Test frame setLayout new Bor
  • Java:Swing:设置JButton的位置

    我想实现以下布局 OK
  • TableModel setCellEditable 并自动将值设置回 false

    我目前正在尝试在 JTable 中实现 JPopupMenu 它允许解锁单元格以进行编辑 Override public void actionPerformed ActionEvent e if e getActionCommand Un
  • 竞争条件和 Clojure Atoms

    clojure atom 的文档指出 Changes to atoms are always free of race conditions 然而 竞争条件不仅是根据更改定义的 而且是在不同线程中并行逻辑操作的上下文中定义的 我想知道 保证
  • 当框架被拖动时,如何设置 JWindow 的位置位于文本字段下方?

    我正在制作一个自动完成项目 就像谷歌一样 我的框架中有一个 jtextfield 每当我在该字段中输入内容时 该文本字段下方就会出现一个 JWindow 并且该窗口来自另一个类 现在的问题是 每当我拖动框架时 如何使窗口始终出现在文本字段下

随机推荐

  • PWA 未安装为 WebApk

    我制作了一个 PWA 它通过了所有 LightHouse 因素 即使在访问网站时也会显示 AddToHomeScreen 弹出窗口 但是当您将其添加到主屏幕时 它不会显示在应用程序抽屉中 并且其图标上有一个 chrome 徽章 我不知道该怎
  • 空白第一个 UITableView 节标题

    我的 UITableView 有 2 个部分 我希望我的第一个标题不存在 没有空间 什么都没有 第一个单元格接触屏幕顶部 我想要为我的第二部分添加一个自定义部分标题 如果我不使用我可以这样做 UIView tableView UITable
  • R Hessian 矩阵

    我需要创建函数的 Hessian 矩阵 如下所示 func lt expression sin x y cos x y vars lt c x y 我也需要二阶导数作为表达式 并且需要多次计算它们 所以我制作了一个一阶导数列表和一个二阶导数
  • git 更新后脚本不起作用

    编辑我的后老问题有几次 我提出了一个新问题 因为现在这是一个新问题 In git hooks post update I have echo a gt gt home pi log git update server info git st
  • XML:处理大数据

    您推荐哪种 XML 解析器用于以下目的 XML 文件 已格式化 包含空格 大约 800 MB 它主要包含三种类型的标签 我们称它们为 n w 和 r 它们有一个名为 id 的属性 我必须尽快搜索该属性 删除我不需要的属性可以节省大约 30
  • 如何使用 Firebase 客户端通过多个客户端连接(Node.JS 客户端库)连接到 Nest API?

    我正在构建一个需要处理多个用户的中央模块 让他们订阅其巢上的数据更改 根据我的搜索 Node JS 库不允许我与 Google Nest API 进行多个 Firebase 连接 在不使用 REST 或 REST 流式传输的情况下 是否有任
  • ObjectSet.AddObject() 与 EntityCollection.Add()

    假设我有两个实体集 团队 和 玩家 我正在向系统添加新团队 为了便于讨论 假设我从一个文件 包含重复项 中添加一千个团队 该系统包含 100 个团队来启动 我的目标是避免重复 而不为每个添加的团队调用 SaveChanges 流程是查询新的
  • AJAX跨域调用

    我了解AJAX跨域策略 所以我不能只是打电话 http www google com 通过 ajax HTTP 请求并显示 结果在我的网站上的某个地方 我尝试使用 dataType jsonp 这实际上可以工作 但我收到语法错误 显然是因为
  • python 深拷贝和浅拷贝并传递引用

    关于python深拷贝和浅拷贝的问题 该帖子位于深拷贝和浅拷贝有什么区别 帮不了我 为什么例如1的和是6而不是10 e g 1 kvps 1 1 2 2 theCopy kvps copy both point to the same me
  • 获取 pandas 数据框中两个日期时间列的差异[重复]

    这个问题在这里已经有答案了 我有一个数据框 它显示的类型为 signup time 151112 non null datetime64 ns purchase time 151112 non null datetime64 ns 实际值的
  • 通用Windows平台和Live SDK

    我有个问题 我最近在我的计算机上安装了 VS 2015 和 Windows 10 拥有通用应用程序真是太棒了 我计划在 UWP 上转换我的一些程序 但我有一个问题 在我的一个程序中 我允许用户将其数据保存在 OneDrive 上 如果 On
  • 如何将 stringVar() 从 tk 转换为 pyqt

    我有这个函数作为我的代码的一部分 我正在尝试从 tk 迁移到 pyqt 但我在 pyqt 方面没有太多经验 我正在尝试生成 Tkinter 字符串变量列表来存储条目 def generate stringvars self temp ent
  • PHP date() 函数没有给出正确的时间

    我试图找出为什么 php date 给我错误的时间 将实际时间设置为 2 小时 这给出了 2011 01 01 03 14 04 而不是 2011 01 01 05 14 04 小时减少 2 我没有更改 date 的时区 当用户访问该网站时
  • 如何从 dict 中获取值列表?

    如何获取 Python 字典中的值列表 在 Java 中 以列表形式获取 Map 的值就像执行以下操作一样简单list map values 我想知道 Python 中是否有一种类似的简单方法可以从字典中获取值列表 dict values返
  • 指向整数数组的指针与指向整数的双指针

    我本以为整数数组是指向整数的指针类型 因此这意味着指向整数数组的指针是指向整数的双指针类型 但我得到的结果却表明事实并非如此 我怀疑整数数组类型不是指向整数的指针类型 这是我的例子 int main int p 3 1 2 3 int pt
  • 迭代时从哈希集中删除元素[重复]

    这个问题在这里已经有答案了 所以 如果我尝试从 Java 中删除元素HashSet迭代时 我得到并发修改异常 从数组中删除元素子集的最佳方法是什么HashSet就像下面的例子一样 Set
  • 在云功能中,我如何从另一个集合加入以获取数据?

    我正在使用云功能向移动设备发送通知 我在 Firestore 中有两个集合clientDetail and clientPersonalDetail 我有clientID两个集合中相同 但日期存储在clientDetail名称存储在 cli
  • Oracle SQL:如何显示空周/没有数据的周?

    如同这个问题 但我的数据集还有一个包含许多 ID 的附加列 每个 ID 都有一个按恒定时间范围回溯的数据集 并且某些周可能会丢失数据 我想填写丢失周的值 例如 我想要这个 ID WEEKEND DAY VALUE A00 2012 01 0
  • Android USBHost 模式 - 为什么我的 IRDA 设备在 ClaimInterface 上失败?

    我的 Xperia Neo Cyanogen Mod 9 连接了一个 Lindy IRDA USB 桥接器 我已经更改了功能以支持主机模式等 代码中一切看起来都很好 我检测到该设备 我可以看到接口和两个端点 一进一出 但是一旦我尝试声明接口
  • 列表框(JList)不会从自定义 ListModel 动态更新

    我正在使用 Seesaw 在 Clojure 中开发 GUI 应用程序 并且在我的自定义 ListModel 更新时无法更新列表框 Java 中的 JList 这是我的一些代码 deftype ActionHistoryListModel