如何在Java禁用字段上启用复制和剪切操作

时间:2018-11-12 08:08:06

标签: java swing keyevent disabled-input

我正在开发一个软件,该软件应允许客户端请求所有禁用的文本字段进行文本选择,剪切和复制操作。但是现在由于面临一些问题而无法进行。符合要求的输入字段应该是只读的文本字段,该文本字段可以选择文本并通过ctrl + c复制/剪切,并且在单击文本字段时不应触发任何“焦点/动作监听器”。

以前,所有禁用的组件都通过

禁用
  

component.setEnabled(boolean)

但是以这种方式,所有禁用的字段都无法进行文本选择,剪切和复制操作。我尝试了几种启用复制和剪切操作的方法,但发现该组件在这种状态下未处理任何关键事件,它似乎与 Component.enableEvents(long)相关,我怀疑此方法将允许用于将 KeyEvent 分派给组件的容器,但是无法从我的项目中访问此方法。

所以我更改了所有组件以使用

  

JComponent.setEditable(boolean)

但是此方法的问题是,所有禁用的组件都将触发 FocusListener ,这不会发生,因为所有禁用的字段都应为只读且为零对其他现有领域的影响。是否有一种方法可以启用剪切和复制操作,而不必通过使用 setEditable 触发 FocusListener 呢?还是还有其他更简单的方法? / p>

(而且任何人都可以帮助解释如何捕获和调度组件中的事件?包括java如何在keyEvent应该/不应该调度到子组件时进行检查,并且有一种方法可以绕过进行检查并允许组件在禁用该字段时处理processKeyEvent。

1 个答案:

答案 0 :(得分:0)

  

但是这些填充和计算仅在启用输入字段的情况下才能执行

为什么这是个问题?

如果您使用所有组件共享的公共侦听器,则只需添加检查以查看组件是否可编辑。

如果每个组件都使用单独的侦听器,则在不可编辑的组件上不添加侦听器。

我不知道为什么要付出如此巨大的努力。

  

如何捕获和分发组件中的事件?

您也许可以使用自定义KeyboardFocusManager。也许重写dispatchEvent(...)方法以防止在您的特定情况下调度事件。