2013-03-26 59 views
0

问题:
有tabPane选项卡确定。
在第一个选项卡中有一个文本字段。在启动应用程序时,我能够专注于此领域。 更改选项卡并返回到第一个选项卡后,我希望焦点位于此文本字段(条形码读取器应该在此字段中处于活动状态),而无需使用鼠标选择字段。javafx setFocus在tabPaine更改后

我能够从标签赶上事件与

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

(无法与后置代号)

,我能够触发EN事件第一个选项卡。 但是field.requestFocus();不起作用。可能是因为这种方法在渲染文本域之前出现。

因此,这里是我的问题:

如何设置集中在一个控制点击TabPane标签后?

+1

是否包裹[requestFocus的](http://docs.oracle.com/ javafx/2/api/javafx/scene/Node.html#requestFocus%28%29)在[Platform.runLater](http://docs.oracle.com/javafx/2/api/javafx/application/Platform。 html#runLater%28java.lang.Runnable%29)解决你的问题? – jewelsea 2013-03-26 21:26:46

+0

我为此打开了一个问题(https://javafx-jira.kenai.com/browse/RT-35765),您可以观看并投票。 – 2014-02-10 14:37:03

回答

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具有焦点时,可以使用光标键更改选项卡选择,并且那里的TextFields也不会使用基于选择的方法获得焦点。如果你需要的话,这可能也应该被处理。我注意到TabPane会在您按下鼠标按钮时立即切换选项卡,我的猜测是,基于选择的方法在鼠标放下后请求将焦点放在TextField上,但是继续向下的鼠标将焦点传回到TabPane,或者甚至是单击鼠标的下移事件,这会改变选择,导致焦点返回到TabPane。但是,我对于原因的假设可能不正确,因为我是JavaFX的新手)

编辑:那处理肯定不是最佳的。例如,如果您使用键更改标签,则会启用doFocus,然后单击TabPane中的任意位置将触发requestFocus调用。我认为这应该被提及。

+0

谢谢!这是一个好主意!使用箭头更换标签时,它不起作用,但要做到这一点,您必须将标签(键)移回标签上,然后才能在keyborad上设置标签,并轻松地将标签(标签)拉到tekstfield。再次感谢! – 2013-03-28 16:32:56