代码之家  ›  专栏  ›  技术社区  ›  Marcelo Glasberg

在JavaFx中,如何控制自定义控件的焦点?

  •  1
  • Marcelo Glasberg  · 技术社区  · 8 年前

    CustomControl TextField s

    文本字段 s有重点 CustomControl.isFocused() 应该返回 true .如果他们都没有焦点,那么 应该返回 false .

    2 回复  |  直到 8 年前
        1
  •  1
  •   trashgod    8 年前

    CustomControl 使用 作文 ,你可以 代表 TextField .举两个例子,

    private final TextField tf1 = new TextField("One");
    private final TextField tf2 = new TextField("Two");
    

    isFocused() 然后简单明了:

    private boolean isFocused() {
        return tf1.isFocused() | tf2.isFocused();
    }
    

    添加焦点侦听器,如图所示 here

    tf1.focusedProperty().addListener((Observable o) -> {
        System.out.println(isFocused());
    });
    tf2.focusedProperty().addListener((Observable o) -> {
        System.out.println(isFocused());
    });
    

    isFocused() final 在里面 Node

    看来你想推翻 在里面 自定义控件 方法,它将违反单个组件具有焦点的概念。像 是一个组合,您需要在内部管理焦点。您可能需要使用自定义 FocusModel 如中所示 ListView

        2
  •  1
  •   Dmytro Maslenko    8 年前

    尝试单行解决方案:

    public BooleanBinding aggregatedFocusProperty() {
       return Bindings.or(field1.focusedProperty(), field2.focusedProperty());
    }
    

    推荐文章