-->

tabPaine变更后的JavaFX的setFocus(javafx setFocus after

2019-10-28 10:40发布

问题:
有tabPane标签确定。
在第一个选项卡上有一个文本字段。 我可以启动应用程序时得到注重这一领域。 改变标签和回来的第一个选项卡我想专注才能在这个文本框后,无需用鼠标选择字段(barcodereader应该在这个领域活跃)。

我能够从卡舌卡与事件

 tp.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Tab>()
   { etc

(无法与后置代号)

和我能够触发EN事件第一个选项卡。 但field.requestFocus(); 不工作。 大概是因为这个方法来渲染文本字段之前。

因此,这里是我的问题:

你如何将焦点设置控制单击TabPane标签后?

Answer 1:

如果你处理鼠标释放事件,它的工作原理:(该doFocus只使requestFocus的处理时,标签选择之前改变,否则在你每次点击TabPane地方踢。)

    final SimpleBooleanProperty doFocus = new SimpleBooleanProperty(false);
    tabPane.setOnMouseReleased(new EventHandler<Event>() {
        @Override
        public void handle(Event event) {
            if (!doFocus.get()) {
                return;
            }
            doFocus.set(false);
            switch (tabPane.selectionModelProperty().getValue().selectedIndexProperty().intValue()) {
            case 0: tf1b.requestFocus(); break;
            case 1: tf2a.requestFocus(); break;
            default: break;
            }
        }
    });
    tabPane.selectionModelProperty().getValue().selectedIndexProperty().addListener(new ChangeListener<Number>() {
        @Override
        public void changed(ObservableValue<? extends Number> observable,
                Number oldValue, Number newValue) {
            doFocus.set(true);
        }
    });

当TabPane具有焦点,一个可以改变标签选择用光标键和那里的TextField也不会得到与基于选择方法的焦点。 这大概也应该被处理,如果你需要它。

(最近我有一个类似的问题。我注意到,该TabPane当你按下鼠标左键立即切换标签。我的猜测是,该选择为基础的方法要求集中在文本字段鼠标右后回落,但持续按下鼠标抢断焦点回到TabPane,或者甚至单鼠标按下事件而改变选择使焦点回到TabPane。但是,我的关于原因的假设可能是不正确的,因为我是一个新手,JavaFX的。)

编辑:这当然处理不是最佳的。 举例来说,如果你改变的钥匙标签,该doFocus将被启用,然后在TabPane任意位置单击将触发requestFocus的电话。 我想这应该被提及。



Answer 2:

此外,看看我的文本区上设置焦点,当所选的选项卡用户改变溶液(使用鼠标或键盘) https://stackoverflow.com/a/19046535/2791746



文章来源: javafx setFocus after tabPaine change