2017-10-02 7 views
-1

J'essaie juste d'apprendre JavaFX et mon objectif est de faire en sorte que le diviseur splitpane se déplace complètement vers la droite si le bouton "Hide Terminal" est cliqué. Voici ce que j'ai configuré dans Scene Builder: enter image description hereSur événement Moused Clicked non déclenché à partir de JavaFX FXML

J'ai essayé d'ajouter du code à la méthode initialise() et je peux confirmer qu'il s'exécute.

Voici le code qui est censé être déclenché à partir de l'événement Clicked souris:

@FXML 
void terminalHideShow(MouseEvent event) { 
    terminalHideShowButton.rotateProperty().setValue(180.0); 
    terminalCommandListOutput.getItems().add("TEXT"); // a test 

    if(mainWindow.getDividerPositions()[0] > 0.99) 
    { 
     mainWindow.setDividerPositions(0.7); 
     terminalHideShowLabel.setText("Hide Terminal"); 
    } 
    else 
    { 
     mainWindow.setDividerPositions(1.0); 
     terminalHideShowLabel.setText("Show Terminal"); 
    } 
} 

Le FXML lui-même:

<Label alignment="CENTER_RIGHT" contentDisplay="RIGHT" nodeOrientation="LEFT_TO_RIGHT" text="Hide Terminal" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
    <graphic> 
     <ImageView fx:id="terminalHideShowButton" accessibleRole="BUTTON" onMouseClicked="#terminalHideShow" rotate="180.0"> 
     <image> 
      <Image url="@../images/angle-right-circle.png" /> 
     </image> 
     </ImageView> 
    </graphic> 
</Label> 
+2

Votre logique ne va-t-elle pas en sens inverse? Vous avez "si la position du diviseur est supérieure à 0,99, réglez-le sur 1" (qui ne peut jamais le déplacer plus de 0.01) et "sinon placez-le à 0.7". –

+0

@James_D bon ramassage, merci –

Répondre

0

Déterminé que pour pouvoir cliquer sur ImageView, j'ai dû définir les options Pick On Bounds, car les parties de transparence n'étaient pas cliquables, ce qui était le plus de l'image de la flèche.

Pour quelque raison que ce soit, ImageView ne peut pas être cliqué lorsqu'il est entouré d'un objet label. Déplacer Label et ImageView pour séparer des objets a résolu le problème principal, même si vous pouvez toujours leur attribuer des gestionnaires d'actions lorsqu'ils sont "enveloppés".

1

Pour la condition if si vous voulez cacher le diviseur, la position initiale du diviseur devrait être supérieure à 0,99 et dans votre image ci-jointe, il semble que c'est moins de 0,99. Donc, dans ce cas, vous devez changer la condition if comme celui-ci

if(mainWindow.getDividerPositions()[0] < 0.99) 
{ 
    mainWindow.setDividerPositions(0.7); 
    terminalHideShowLabel.setText("Hide Terminal"); 
} 

Je ne sais pas ce que vos critères souhaités pour cacher le diviseur ... donc changer votre si et d'autre déclaration comme cette façon. Je viens de mentionner l'exemple en base de vous image jointe