我正在开发一个软件,该软件应允许客户端请求所有禁用的文本字段进行文本选择,剪切和复制操作。但是现在由于面临一些问题而无法进行。符合要求的输入字段应该是只读的文本字段,该文本字段可以选择文本并通过ctrl + c复制/剪切,并且在单击文本字段时不应触发任何“焦点/动作监听器”。
以前,所有禁用的组件都通过
禁用component.setEnabled(boolean)
但是以这种方式,所有禁用的字段都无法进行文本选择,剪切和复制操作。我尝试了几种启用复制和剪切操作的方法,但发现该组件在这种状态下未处理任何关键事件,它似乎与 Component.enableEvents(long)相关,我怀疑此方法将允许用于将 KeyEvent 分派给组件的容器,但是无法从我的项目中访问此方法。
所以我更改了所有组件以使用
JComponent.setEditable(boolean)
但是此方法的问题是,所有禁用的组件都将触发 FocusListener ,这不会发生,因为所有禁用的字段都应为只读且为零对其他现有领域的影响。是否有一种方法可以启用剪切和复制操作,而不必通过使用 setEditable 触发 FocusListener 呢?还是还有其他更简单的方法? / p>
(而且任何人都可以帮助解释如何捕获和调度组件中的事件?包括java如何在keyEvent应该/不应该调度到子组件时进行检查,并且有一种方法可以绕过进行检查并允许组件在禁用该字段时处理processKeyEvent。
答案 0 :(得分:0)
但是这些填充和计算仅在启用输入字段的情况下才能执行
为什么这是个问题?
如果您使用所有组件共享的公共侦听器,则只需添加检查以查看组件是否可编辑。
如果每个组件都使用单独的侦听器,则在不可编辑的组件上不添加侦听器。
我不知道为什么要付出如此巨大的努力。
如何捕获和分发组件中的事件?
您也许可以使用自定义KeyboardFocusManager
。也许重写dispatchEvent(...)
方法以防止在您的特定情况下调度事件。