2016-11-01 21 views
0

私はjavafxを使用するプロジェクトに取り組んでいます。私は解決方法がわからない問題に遭遇しました。私はGUI全体にかなり新しいですが、これは解決するのはかなり簡単な問題であるように思われるので、なぜ私はオンラインで役に立つものを見つけることができないのかわかりません。タブが選択されたときにフィールドを更新する

このアプリは多くのタブで構成されており、新しいタブが選択されるたびにタブがペインのメソッドを呼び出すようにしたいと考えています。このメソッドは、特定のタブに応じてコンボボックスやタルベルビューを更新します。

タブを定義してtabPaneに追加するクラスでは、tabPaneにリスナーを追加して選択したタブを取得できますが、実際のTabオブジェクトにアクセスできるかどうかはわかりませんペイン上の機能、または他の有用な機能

これを解決する最良の方法は、「このタブ/ペインは選択/焦点が合っています」にリスナーを追加することですが、そのようなものはまだ見つかりませんでした。

答えて

2

あなたは、このような更新を必要とする各TabRunnableuserDataとしてを追加し、選択モデルは、ユーザデータを取得したときに、タブの選択の変更更新をトリガ選択したタブにリスナーを追加し使用することができます。

例あなたはまた、これはあなたのためのより便利であれば、Tabのコンテンツへのユーザーデータ等のアップデータを設定することができ

@Override 
public void start(Stage primaryStage) { 
    final Label countLabel = new Label("You visited this tab 0 time(s) before."); 

    // increments visit count every time the tab is activated 
    Runnable labelUpdater = new Runnable() { 

     private int count = 0; 

     @Override 
     public void run() { 
      countLabel.setText("You visited this tab " + (++count) + " time(s) before."); 
     } 

    }; 

    Tab tab1 = new Tab("tab1"); 
    tab1.setContent(countLabel); 

    // add runnable as user data 
    tab1.setUserData(labelUpdater); 

    TabPane tabPane = new TabPane(tab1, new Tab("tab2")); 

    // execute update when a newly selected tab contains a updater 
    tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { 
     if (newValue != null) { 
      Runnable updater = (Runnable) newValue.getUserData(); 
      if (updater != null) { 
       updater.run(); 
      } 
     } 
    }); 

    Scene scene = new Scene(tabPane, 300, 300); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
:私はちょうどすることができます

// tab1.setUserData(labelUpdater); 
    countLabel.setUserData(labelUpdater); 

    TabPane tabPane = new TabPane(tab1, new Tab("tab2")); 
    tabPane.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { 
     if (newValue != null) { 
      Node content = newValue.getContent(); 
      if (content != null) { 
       Runnable updater = (Runnable) content.getUserData(); 
       if (updater != null) { 
        updater.run(); 
       } 
      } 
     } 
    }); 
0

hereを見ると、探しているイベントをフィールドサマリーで表示することができます。 SELECTION_CHANGED_EVENT。あなたのタブごとにこのイベントのリスナーを追加するだけで、あなたは金色になるはずです。

+0

おかげで、しかし、それを働かせないでください。ペイン自体から呼び出せますか?今、私はこのようなものを持っています "tabPane.addEventHandler(Tab.SELECTION_CHANGED_EVENT、イベント - > System.out.println(" 999 "));"それは動作していないようです。私は、私がオンラインで見つけたメソッドからtabPaneを取得しました。それはうまくいくはずですが、私はイメージが良い方法であることをイメージしています(tabPane @ 320c2196 [styleClass = tab-pane]と言う)。 –

+0

私はイベントハンドラをタブペインではなくタブ自体に追加すると思います。 –

関連する問題