【问题标题】:How to add a control panel on a JTable row on MouseOver (hover)如何在 MouseOver 上的 JTable 行上添加控制面板(悬停)
【发布时间】:2022-01-02 21:27:23
【问题描述】:

我有一个不可编辑表格,我想在其上显示一个行上下文面板(可能是JPanel)。有点像 Gmail 的做法:将鼠标移到邮件行上时,会在该特定行上显示一个简单的工具栏。

就像在 gmail 中一样,我想显示的控件的操作不会编辑值,而是会使用行中的值来执行一些报价工作。

我玩过以下游戏:

  • TableCellRenderer,显示大部分都可以,但有局限性:

    • 该组件仅用于渲染,因此不能使用它来简单地添加多个按钮
    • 它需要另一列
    • 对于悬停行为(即仅当鼠标悬停在行上时显示在行上)需要与表格的MouseListener 协作
  • TableCellEditor,我的表格不可编辑,所以单元格编辑器也没有被调用

    • 它还需要一个特定的列
    • 还需要与表的MouseListener协作
  • MouseMotionListener 可用于显示特定坐标的弹出窗口

    • 弹出窗口感觉它是正确的组件
    • 有相当多的代码来处理弹出窗口的生命周期(当鼠标移出该行时关闭它,如果已经打开了一个弹出窗口,则不要重新打开)
  • 工具提示:据我所知,swing 工具提示不允许有按钮等控制组件

我做了有关堆栈溢出的相关问答。但是它们都需要添加一个列来显示和使用这些摆动组件。

【问题讨论】:

  • 如果已经打开了一个弹出窗口,请不要重新打开我会使用JPopupMenu。您将跟踪当前行。当它发生变化时,您隐藏弹出窗口并重新显示它。
  • @camickr 感谢您的建议。这让我找到了JLayeredPane,不过我仍然需要解决关于焦点、显示和布局的问题。

标签: java swing jtable


【解决方案1】:

鉴于您没有发布任何代码,这个问题有点笼统。

不过,这样做的方法是将 JPanel 粘贴在 JPopupMenu 中。您需要在您的 GUI 上创建一个侦听器以了解 JPopupMenu 应该出现的时间和位置

--- 编辑---

我认为您必须将 JMenus 添加到 JPopupMenu,而我建议添加 JPanel 的方法不会干净利落。您可以使用 JPopupMenu,也可以使用 JWindow 并将 JPanel 放入其中。

【讨论】:

  • 嗨@ControlAltDel,是的,我不认为代码是必要的,因为我正试图以最佳角度解决这个用户体验问题。我已经开始使用JLayeredPane 而不是创建 JWindow / JPopupMenu 而我目前正在努力解决一些布局/绘画问题,我相信这种方法会更好。
猜你喜欢
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多