可编辑 JavaFX ComboBox 上的 MouseListener
Posted
技术标签:
【中文标题】可编辑 JavaFX ComboBox 上的 MouseListener【英文标题】:MouseListener on editable JavaFX ComboBox 【发布时间】:2014-12-16 07:11:35 【问题描述】:MouseEvent 在设置为可编辑时不适用于 JavaFX ComboBox。它在不可编辑的 ComboBox 上运行良好。有没有办法在可编辑的 ComboBox 上设置 MouseEvent?
package editablecombobox;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class EditableComboBox extends Application
@Override
public void start(Stage primaryStage)
ComboBox combo = new ComboBox();
combo.setEditable(true);
combo.setOnMousePressed(new EventHandler<MouseEvent>() //adding MouseEvent on ComboBox
@Override
public void handle(MouseEvent event)
System.out.println("MOUSE PRESSED!!!");
);
StackPane root = new StackPane();
root.getChildren().add(combo);
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
public static void main(String[] args)
launch(args);
setOnMousePressed 不起作用。
【问题讨论】:
请提供相关代码,以便我们更好地提供帮助。 您具体说的是哪个MouseEvent
?我试过onMouseEntered
和其他几个,它们都可以工作。
@ItachiUchiha 我已经编辑了我的问题。我创建了一个虚拟应用程序。 onMousePressed 不起作用。
【参考方案1】:
我猜你只是对ComboBox
的可编辑文本字段区域感兴趣。您需要将MouseListener
添加到ComboBox
的编辑器(TextField
)中。尝试使用:
combo.getEditor().setOnMousePressed(new EventHandler<MouseEvent>()
@Override
public void handle(MouseEvent event)
System.out.println("MOUSE PRESSED!!!");
);
【讨论】:
1.getEditor
可能返回null
,您应该通过注册editorProperty()
和2. 的更改来检查。编辑器是ComboBox 控件元素的子元素,因此鼠标事件应该向上委托。如果不是这样,这里可能还有另一个问题(甚至可能是 JavaFX Bug)?
永远不会返回null
,尝试通过ComboBox类的editorProperty()
方法
你是对的,在挖掘源代码时,编辑器会与其属性一起被初始化,但 API 文档明确指出:“如果 ComboBox 不可编辑,则编辑器为空。”因此,这可能会在未来的版本中发生变化和中断。
恕我直言,OP 足够聪明,可以检查他是否正在从 ComboBox 中删除 editable
属性。 我们不是来为他们写代码的……
这就是为什么我既没有否决你的回答也没有说它是错误的,我只是想提一下。毕竟,我认为这就是 cmets 的用途..以上是关于可编辑 JavaFX ComboBox 上的 MouseListener的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式在 JavaFX ComboBox 中设置字符串值
如何在 JavaFX 2 中编辑 ComboBoxTableCell 的默认渲染行为?