2017-03-21 4 views
0

J'ai un onglet avec id « total » et obtenir dans un écouteur avec interrupteur:Comment effectuer une action lorsque l'onglet est sélectionné dans javafx?

switch ((event.getSource().toString().substring(event.getSource().toString().indexOf("=")+1,event.getSource().toString().indexOf(",")))) { 
     case "signin": 
      changeScene(signin, "atmOperation"); 
      User user = new User(); 
      user.check(); 
      break; 

     case "signout": 
      changeScene(signout, "login"); 
      break; 
     case "signup": 
      changeScene(signup, "signup"); 
      break; 
     case "back": 
      changeScene(back, "atmOperation"); 
      break; 
     case "exit": 
      stage = (Stage) exit.getScene().getWindow(); 
      stage.close(); 
      break; 
     case "total": 
      System.out.print(total.isSelected()); 
      break; 

Et voici ma mise en page fichier FXML:

<?import javafx.scene.control.Tab?> 
<?import javafx.scene.control.TabPane?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.layout.Pane?> 

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="443.0" prefWidth="610.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller"> 
    <children> 
     <TabPane fx:id="tabPane" layoutY="37.0" nodeOrientation="RIGHT_TO_LEFT" onContextMenuRequested="#event" prefHeight="400.0" prefWidth="610.0" tabClosingPolicy="UNAVAILABLE"> 
     <tabs> 
      <Tab fx:id="total" closable="false" text="x" onSelectionChanged="#event"> 
      <content> 
       <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> 
      </content> 
      </Tab> 
      <Tab text="x"> 
      <content> 
       <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> 
      </content> 
      </Tab> 
      <Tab text="y"> 
       <content> 
        <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> 
       </content> 
      </Tab> 
      <Tab text="y"> 
       <content> 
        <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" /> 
       </content> 
      </Tab> 
     </tabs> 
     </TabPane> 
    </children> 
</Pane> 

Je veux gérer programm si l'utilisateur clique sur l'onglet avec l'ID total mais j'ai utilisé onSelectionChanged qui ne peut pas m'aider! Comment puis-je le gérer si l'utilisateur clique sur l'onglet ID total?

+0

Voulez-vous effectuer une action lorsque l'onglet avec fx: id 'total' est sélectionné? Ou voulez-vous que l'onglet soit sélectionné par défaut? – ItachiUchiha

+0

Merci mon ami, je veux effectuer une action quand l'onglet avec fx: id total est sélectionné –

Répondre

0

Vous pouvez le faire avec selectedItemProperty ou selectedIndexProperty. Voici la solution utilisant selectedItemProperty. L'interrupteur n'est pas nécessaire.

// starts here 
tabPane.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Tab>() { 
    @Override 
    public void changed(ObservableValue<? extends Tab> observable, Tab oldTab, Tab newTab) { 
     if(newTab.equals (total)) {    
      System.out.print(total.isSelected()); 
     } 
    } 
}); 
0

Vous pouvez utiliser onSelectionChanged pour cela, dans votre contrôleur de méthode event, juste vérifier si le totalTab est sélectionné ou non, comme ci-dessous, s'il vous plaît noter que le nom de l'onglet annotée doit correspondre au fx:id ensemble dans le FXML fichier, et le nom de la méthode, dans ce cas event doit correspondre au nom onSelectionChanged="#event" dans le fichier fxml.

public class Controller { 

     @FXML 
     private Tab total; 

     @FXML 
     void event(Event ev) { 
      if (total.isSelected()) { 
       System.out.println("Tab is Selected"); 
       //Do stuff here 
      } 
     } 
    } 

ou pur programme:

total.setOnSelectionChanged(event -> { 
     if (total.isSelected()) { 
      System.out.println("Tab is Selected"); 
      //Do stuff here 
     } 
    });