【发布时间】:2022-01-02 21:27:23
【问题描述】:
我有一个不可编辑表格,我想在其上显示一个行上下文面板(可能是JPanel)。有点像 Gmail 的做法:将鼠标移到邮件行上时,会在该特定行上显示一个简单的工具栏。
就像在 gmail 中一样,我想显示的控件的操作不会编辑值,而是会使用行中的值来执行一些报价工作。
我玩过以下游戏:
-
TableCellRenderer,显示大部分都可以,但有局限性:- 该组件仅用于渲染,因此不能使用它来简单地添加多个按钮
- 它需要另一列
- 对于悬停行为(即仅当鼠标悬停在行上时显示在行上)需要与表格的
MouseListener协作
-
TableCellEditor,我的表格不可编辑,所以单元格编辑器也没有被调用- 它还需要一个特定的列
- 还需要与表的
MouseListener协作
-
MouseMotionListener可用于显示特定坐标的弹出窗口- 弹出窗口感觉它是正确的组件
- 有相当多的代码来处理弹出窗口的生命周期(当鼠标移出该行时关闭它,如果已经打开了一个弹出窗口,则不要重新打开)
-
工具提示:据我所知,swing 工具提示不允许有按钮等控制组件
我做了有关堆栈溢出的相关问答。但是它们都需要添加一个列来显示和使用这些摆动组件。
【问题讨论】:
-
如果已经打开了一个弹出窗口,请不要重新打开我会使用
JPopupMenu。您将跟踪当前行。当它发生变化时,您隐藏弹出窗口并重新显示它。 -
@camickr 感谢您的建议。这让我找到了
JLayeredPane,不过我仍然需要解决关于焦点、显示和布局的问题。