【问题标题】:MouseListener on editable JavaFX ComboBox可编辑 JavaFX ComboBox 上的 MouseListener
【发布时间】: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 不起作用。

标签: combobox javafx javafx-8


【解决方案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 的用途..
猜你喜欢
  • 2015-07-11
  • 2016-10-21
  • 2019-09-01
  • 2018-03-30
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
相关资源
最近更新 更多