2013-03-26 56 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