2017-01-22 51 views
2

以前はJava Swingで作業していましたが、今はJavaFXで作業しようとしています。私のJava Swingコードの最後の時間:JavaFXでTabPaneからタブを実際に隠す方法

//These line of code is to call method that declared in ContentPage.java 
contentPage.adminFeatureEnabled(adminEnabled); 
contentPage.managerFeatureEnabled(managerEnabled); 

と私のContentPage.java

//By default, all feature (or tab) are enabled. 
//This method is to remove register account if the user login into the system is manager and staff 
public void adminFeatureEnabled(boolean a) { 
    if (!a) { 
     tabPane.removeTabAt(tabPane.indexOfComponent(registerAccount)); 
    } 
} 
//This method is to remove register account and purchase order if the user who log into the system is staff 
public void managerFeatureEnabled(boolean a) { 
    if(!a) { 
     tabPane.removeTabAt(tabPane.indexOfComponent(purchaseOrder)); 
    } 
} 

と私のコード内で:

if (role.equals("admin")){ 
    contentPage.contentFrame.setTitle("Menu - Admin!"); 
    contentPage.disUser.setEditable(true); 
    contentPage.chgRoles.setEnabled(true); 
} else if(role.equals("manager")){ 
    contentPage.contentFrame.setTitle("Menu - Manager!"); 
    contentPage.chgRoles.setSelectedItem("manager"); 
    adminEnabled = false; 
}else if (role.equals("staff")){ 
    contentPage.contentFrame.setTitle("Menu - Staff!"); 
    contentPage.chgRoles.setSelectedItem("staff"); 
    adminEnabled = false; 
    managerEnabled = false; 
} 

上記のコードは次のように実行します。

  1. ユーザーが管理者アカウントでログインすると、すべての機能
    私はJavaFXのでは上記と同じ機能を望んでいたが、私は知らない:(タブ)マネージャとして
  2. ときに、ユーザのログインを有効にし、いくつかの機能(タブ)が今

私の現在の問題を非表示になります方法のどれも私が望むように働かないように。

誰もが私を助けることができますか?

+0

関連(いないタブの特定が):[JavaFXの上で「レンダリング」などのプロパティを実装する方法はありますか?](http://stackoverflow.com/questions/19666982/is-there-a- way-to-implement-a-property-like-rendered-javafx)を使用します。 – jewelsea

答えて

3

単にtabsリストを変更:

次の例では、追加/ CheckBox ESが(非)選択された場合、Tab Sを除去します。

@Override 
public void start(Stage primaryStage) { 
    Tab tab1 = new Tab("Tab 1", new Label("1")); 
    Tab tab2 = new Tab("Tab 2", new Label("2")); 

    TabPane tabPane = new TabPane(); 
    tabPane.setPrefSize(400, 400); 

    CheckBox cb1 = new CheckBox("1"); 
    CheckBox cb2 = new CheckBox("2"); 
    cb1.selectedProperty().addListener((observable, oldValue, newValue) -> { 
     if (newValue) { 
      tabPane.getTabs().add(0, tab1); 
     } else { 
      tabPane.getTabs().remove(tab1); 
     } 
    }); 
    cb2.selectedProperty().addListener((observable, oldValue, newValue) -> { 
     if (newValue) { 
      tabPane.getTabs().add(tab2); 
     } else { 
      tabPane.getTabs().remove(tab2); 
     } 
    }); 

    Scene scene = new Scene(new VBox(new HBox(cb1, cb2), tabPane)); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

これは良い解決策ではありません。多くのタブが追加されたり削除されたりすると、タブパインのタブインデックスを制御することが非常に難しいからです。別の解決策がありますか? –

+0

@Pavel_Kいいえ、 'Tab'sを完全に隠すために、リストを変更する以外の解決策はありません。しかし、通常、インデックスを介してタブにアクセスする必要はありません。あなたが 'Tab'sにアクセスする必要がある場合。 "管理者インデックス"によって、あなたはまだすべての 'タブ'を別の 'リスト'に保存することができます... – fabian

+0

あなたの答えをありがとう。 'setVisible(false)= remove(tab)'、 'setVisible(true)= add(tab)'を意味します。しかし、 'add(tab)'はリストの最後に追加されます。例えば、もし私が12のタブを持っていて3番目を隠したければ、隠れている2番目と4番目のものが閉じられた後、3番目の位置にそれを加えると間違った順序の位置になります。 –

0

Tab#setEnabled();Tab#setVisible();をご覧ください。

タブはタブパネルに登録されているため(タブパネルから削除する必要はありません)、これらの2つのフラグを設定することでタブを無効/非表示にできます。

もちろん、これらのプロパティはjavafx bindingsを使用してバインドできます。フラグ設定コードの数行を節約することができます。

+1

'javafx.scene.control.Tab#setEnabled'と' javafx.scene.control.Tab#setVisible' [javadoc](http://docs.oracle.com/javafx/2/api/javafx/scene)はありません。 /control/Tab.html)。 TabはNodeを拡張しません。 – geisterfurz007

関連する問題