问题:
有tabPane标签确定。
在第一个选项卡上有一个文本字段。 我可以启动应用程序时得到注重这一领域。 改变标签和回来的第一个选项卡我想专注才能在这个文本框后,无需用鼠标选择字段(barcodereader应该在这个领域活跃)。
我能够从卡舌卡与事件
tp.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Tab>()
{ etc
(无法与后置代号)
和我能够触发EN事件第一个选项卡。 但field.requestFocus(); 不工作。 大概是因为这个方法来渲染文本字段之前。
因此,这里是我的问题:
你如何将焦点设置控制单击TabPane标签后?
如果你处理鼠标释放事件,它的工作原理:(该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的电话。 我想这应该被提及。
此外,看看我的文本区上设置焦点,当所选的选项卡用户改变溶液(使用鼠标或键盘) https://stackoverflow.com/a/19046535/2791746