【发布时间】:2020-03-10 07:52:42
【问题描述】:
我想将KEY_PRESSED 事件的KeyEvent 处理程序(或过滤器)添加到ListView 以用于各种KeyCodes 和修饰符(shift 和/或控制键向下)。 JavaFX API 似乎为大多数(如果不是全部)提供了默认处理,但我无法确定:
- 处理了哪些事件(和类型),或者
- 如何处理它们(“处理代码”如何读取?),或
- 处理是否通过属性设置实现(例如
setOnKeyPressed(..)与addEventFilter(..),或 - 是否可以覆盖/替换默认处理。
这些信息是否容易获得?是否有资源以“简单的英语”方式回答这些问题?还是 JavaFX 开发的一般政策问题是这些操作对开发人员来说是不受限制的,并且必须在“原样,接受还是放弃”的基础上接受?
提前感谢您对此的任何意见。
【问题讨论】:
-
没有记录哪些事件由控件处理以及控件的响应操作。但是,它们遵循标准的 UI/UX 实践(例如,对于文本输入控件,快捷键 +c 表示“复制到剪贴板”),甚至可以根据平台自定义自己(例如,在非 Mac 上,按钮可以通过“输入”键触发) .标准 JavaFX 控件分为三部分:
Control子类(模型)、Skin[Base]实现(视图)和“行为”类(处理用户交互)。您可以查看行为类的源代码以了解它们的作用。 -
@Slaw 感谢您的回复。正如你暗示的那样,我查看了行为类 (
ListViewBehavior),而我学到的东西是混合的。如果您不介意,我可以在聊天中更详细地解释字符限制不适用的情况。对于可能感兴趣的其他人,内置行为是在“原样,接受或放弃”的基础上提供的。如果你想偏离,你必须使用一个过滤器来消耗事件 ..AND .. 幸运地猜到要阻止哪些事件类型; API 不太清楚。 -
行为本应与皮肤同时被提取到公共范围 - 但由于未解决的 api(和规范)问题而未能实现。从那时起,负责的开发人员离开了 oracle 并猜测行为 dev 发生了什么 .. ;) 因此,您可以根据是否允许使用内部东西来选择:是 - 反射地访问行为并修改其 inputMaps,否 - 获取来自 openjdk/jfx 的源,修改行为并编译您的自定义 fx。如果两者都禁止,您仍然可以 c&p 皮肤/行为并根据需要进行修改
-
@kleopatra 感谢您的回复。关于开发人员的有趣信息,这有助于解释为什么 JavaFX 的某些部分看起来像是在进行中,而其他部分则非常出色。您的建议很好,但由于这里涉及的大多数 API 都受到限制,我看不出它们是如何工作的。很乐意更详细地解释,但这需要比这里允许的字符限制更多的空间,所以你必须帮我打开一个聊天。在不同的东西上,你曾经做过 SwingX(或类似的东西)吗?如果是这样,那么我有一些你可能会感兴趣的东西。
-
是的,一直是 SwingX 的主要开发人员之一 :)
标签: listview javafx event-handling