2017-01-22 2 views
2

ранее я работал над Java Swing, и теперь я пытаюсь работать с JavaFX. Мой Java код Качели последний раз:как на самом деле скрыть вкладку TabPane с JavaFX

//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. при входе пользователя в систему с учетной записью администратора, все функции (Tab) включен
  2. , когда пользователь Войти как менеджер, некоторые функции (вкладка) будет скрыть

Моя текущая проблема сейчас:
Я хотел такую ​​же функцию, как описано выше в JavaFX, но я не знаю, как ни один из методов не работает так, как я хотел.

Кто-нибудь может мне помочь?

+0

Связанных (хотя и не вкладка конкретная) [? Есть ли способ, чтобы реализовать свойство как «вынесенные» на JavaFX] (http://stackoverflow.com/questions/19666982/is-there-a- путь к реализации-а-свойство типа рендеренной-на-JavaFX). – jewelsea

ответ

3

Просто измените tabs список:

Следующий пример добавляет/удаляет Tab с, когда CheckBox эс являются (не) выбран.

@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

Это нехорошее решение, потому что, если есть много вкладок, и они добавляются и удаляются, то очень сложно контролировать индекс вкладки в tabpane. Есть ли другое решение? –

+0

@Pavel_K Нет, чтобы полностью скрыть 'Tab', нет другого решения, кроме изменения списка. Однако обычно не нужно обращаться к вкладкам с помощью индекса. Если вам нужно получить доступ к 'Tab', например. «admin index», вы все равно можете хранить все 'Tab' в другом 'List' ... – fabian

+0

Благодарим вас за ответ. Я имею в виду, что 'setVisible (false) = remove (tab)', 'setVisible (true) = add (tab)'. Но 'add (tab)' добавляет в конец списка. Если, например, у меня есть 12 вкладок и вы хотите скрыть 3'-й и после его укрытия 2-й и 4-й были закрыты, тогда, когда я добавлю его на 3-ю позицию, у него будет неправильная позиция. –

0

Возможно, вы захотите взглянуть на Tab#setEnabled(); и Tab#setVisible();.

Вкладки будут по-прежнему зарегистрированы в TabPane (поэтому вам не нужно удалять их из TabPane), но вы можете отключить/скрыть вкладки, установив эти два флага.

Конечно, эти свойства могут быть связаны с помощью 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). Вкладка также не расширяет узел. – geisterfurz007

Смежные вопросы