可编辑 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 组合框

如何在 JavaFX 2 中编辑 ComboBoxTableCell 的默认渲染行为?

Java 8 DatePicker 和可编辑的 ComboBox 行为在 8u51 和 8u60 之间发生变化

在 JavaFX 中隐藏表格

如何修复 javafx 中的渲染错误(ComboBox、ListView)