gpt4 book ai didi

contextmenu - 如何禁用文本字段上的默认上下文菜单

转载 作者:行者123 更新时间:2023-12-04 14:15:25 27 4
gpt4 key购买 nike

默认情况下 JavaFX TextField有一个内置 ContextMenu带有“撤消”、“复制”、“剪切”等选项。 ComboBox也有同样的ContextMenu当它被设置为可编辑时( ComboBox 实际上是编辑器的一部分,它是一个 TextField )。

我想换这个ContextMenu使用自定义,但我在禁用默认设置时遇到问题。

我试过吃 ContextMenu和鼠标点击事件,但 ComboBoxComboBox.getEditor()两者都有一个空值 ContextMenu .

我错过了什么吗?

最佳答案

我找到了一种禁用默认弹出菜单的方法。然后您可以添加自己的,而不会获得双菜单效果。

ComboBox<String> cb_ = new ComboBox<>();
final EventDispatcher initial = cb_.getEditor().getEventDispatcher();
cb_.getEditor().setEventDispatcher(new EventDispatcher()
{
@Override
public Event dispatchEvent(Event event, EventDispatchChain tail)
{
if (event instanceof MouseEvent)
{
//shot in the dark guess for OSX, might not work
MouseEvent mouseEvent = (MouseEvent)event;
if (mouseEvent.getButton() == MouseButton.SECONDARY ||
(mouseEvent.getButton() == MouseButton.PRIMARY && mouseEvent.isControlDown()))
{
event.consume();
}
}
return initial.dispatchEvent(event, tail);
}
});

注意 - 我没有通过组合框上的菜单添加我自己的菜单,我不确定这是否可行(可能)。

如果您将组合框包装在 Hbox 中,并向 Hbox 添加一个菜单 - 我知道这会起作用。
HBox hbox = new HBox();
ContextMenu contextMenu = new ContextMenu();
....
hbox.setOnContextMenuRequested(new EventHandler<ContextMenuEvent>()
{
@Override
public void handle(ContextMenuEvent event)
{
contextMenu.show(hbox, event.getScreenX(), event.getScreenY());
}
});

关于contextmenu - 如何禁用文本字段上的默认上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13562712/

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