gpt4 book ai didi

java - 我如何知道可编辑的 JComboBox 的文本何时被更改?

转载 作者:太空狗 更新时间:2023-10-29 22:33:15 24 4
gpt4 key购买 nike

我有一个可编辑 JComboBox,我想在其中通过键入或选择更改文本时采取一些操作。在这种情况下,文本是一个模式,我想验证该模式是否有效并显示导致一些测试数据的匹配项。

完成显而易见的操作后,附加一个 ActionHandler,我发现,对于打字,事件似乎充其量是不可靠地触发(选择很好)。当它 确实 因键入而触发时,检索到的文本(使用 getEditor().getItem(),因为 getSelectedItem() 仅在从列表中选择文本时才获取文本)似乎是最后一个事件被触发时的文本 - 也就是说,它总是缺少在 Action 事件被触发之前立即键入的字符。

我原以为 Action 事件会在短暂的延迟(500 毫秒到 1 秒)后触发,但它似乎在键入时立即触发(如果它被触发的话)。

我能想到的唯一可行的替代方法是在获得焦点时简单地启动一个 1 秒的计时器,在失去焦点时将其终止,如果内容与上次不同,则将其作为计时器 Action 进行。

有什么想法或建议吗?

代码片段不是特别有趣:

find.addActionListener(this);
...
public void actionPerformed(ActionEvent evt) {
System.out.println("Find: "+find.getEditor().getItem());
}

最佳答案

Action 监听器通常仅在您按下回车键或将焦点从组合框的编辑器移开时触发。拦截对编辑器的个别更改的正确方法是注册一个文档监听器:

final JTextComponent tc = (JTextComponent) combo.getEditor().getEditorComponent();
tc.getDocument().addDocumentListener(this);

DocumentListener interface具有每当修改支持编辑器的文档时调用的方法(insertUpdate、removeUpdate、changeUpdate)。

您还可以使用匿名类来更细粒度地控制事件的来源:

final JTextComponent tcA = (JTextComponent) comboA.getEditor().getEditorComponent();
tcA.getDocument().addDocumentListener(new DocumentListener() {
... code that uses comboA ...
});

final JTextComponent tcB = (JTextComponent) comboB.getEditor().getEditorComponent();
tcB.getDocument().addDocumentListener(new DocumentListener() {
... code that uses comboB ...
});

关于java - 我如何知道可编辑的 JComboBox 的文本何时被更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1252698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com