我有JTable
个自定义单元格编辑器。编辑器实现了FocusListener
,因此如果用户点击单元格,我可以检查单元格的内容是否有效。
我想在JOptionPane
(focusLost
)中使用EventDispatchThread
,以允许用户选择是还原为旧值还是接受调整后的值。< / p>
这是问题;如果用户正在编辑某个单元格,然后点击该表格旁边的按钮,那么在 actionlisteners
返回之前,该按钮的JOptionPane
会被警告。
这就是我想要发生的事情:
相反,这种情况正在发生:
在JOptionPane
关闭之前,是否可以推迟按钮的动作事件?
从其他线程,我已经读过JDialog
做了一些魔术来确保事件调度继续,所以Dialog本身可以处理事件。
答案 0 :(得分:0)
根据我收集的内容,您根本不想激活按钮的动作侦听器,直到用户从JOptionPane中选择正确的值为止。
对我来说,似乎解决方案是设置一个'禁用'标志,一旦触发了focusLost,它就会上升。选择完成后,禁用标志将关闭。触发按钮操作时,它会检查表单是否已禁用;如果是的话,它什么都不做。如果不是,它会继续正常。
请注意,一旦用户在JOptionPane中选择了某些内容,按钮事件就不会自动进入,而是必须再次单击该按钮。对我来说,这似乎是更好的功能,然后在他需要更改表格后再次为他点击“按钮”。
答案 1 :(得分:0)
将验证逻辑放在TableCellEditor#stopCellEditing()
内,显示对话框,如果值无效,则返回false。
要在焦点丢失时自动停止表编辑,请使用table.putClientProperty("terminateEditOnFocusLost", true);
,但我认为这不会停止按钮动作侦听器的运行。相反,我通常在actionPerformed中停止表编辑,并在返回false时不执行任何操作(或在适当时取消编辑,例如,如果操作是删除该表行)。