2016-07-09 16 views
1

Ich habe meinen Code korrigiert und jetzt funktioniert es mit der Maus Scroll, aber ich kann nur nach unten scrollen. Es passiert, weil ich "val + = sb.getUnitIncrement()" eingestellt habe, also dachte ich, eine Bedingung einzufügen, um zu erkennen, ob ich nach oben oder unten blättern kann und ob ich "val - = sb.unitIncrement()" nach oben scrollen kann. Das Problem ist, dass ich diese Methode nicht finden konnte. Was soll ich verwenden?ScrollEvent in meiner Szene

private double val = 0; 

@FXML 
private Button back; 

@FXML 
private AnchorPane Instructions; 

@FXML 
private ImageView image; 

@FXML 
private ScrollBar sb; 


private void scroll() { 
    sb.sceneProperty().addListener((ObservableValue<? extends Scene> observable, Scene oldValue, Scene newValue) -> { 
     if (newValue != null) { 
      sb.getScene().setOnScroll((ScrollEvent event) -> { 
       if (val < sb.getMax()) { 
        val += sb.getUnitIncrement(); 
        image.setLayoutY(-val); 
        if (val < sb.getMax() - sb.getUnitIncrement()) { 
         back.setVisible(false); 
        } else if (val >= sb.getMax() - sb.getUnitIncrement()) { 
         back.setVisible(true); 
        } 
       } 
      }); 
     } 
    }); 
} 
+2

In 'scroll()' setzen Sie 'setOnScroll' der Bühne, um' moveImage() 'beim Scrollen aufzurufen. Dann fügen Sie in 'moveImage' immer wieder einen Listener hinzu ... – DVarga

+0

Ich habe die Frage aktualisiert –

+1

Wäre es nicht einfacher, das Bild in eine' ScrollPane' zu ​​bringen und es für Sie arbeiten zu lassen? – DVarga

Antwort

0

ich mit DVarga einverstanden sind, ist es einfacher, wenn Sie einen ScrollPane verwenden. Ändern Sie Ihre FXML-Datei, löschen Sie die ScrollBar und fügen Sie eine ScrollPane hinzu. Dann versuchen Sie mit diesem Code:

@FXML 
private ImageView image; 

@FXML 
private Button back; 

@FXML 
private AnchorPane Instructions; 

@FXML 
private ScrollPane sp; 

private void setScrollPane() { 
    sp.setContent(image); 
    sp.setHbarPolicy(ScrollBarPolicy.NEVER); 
    sp.setVbarPolicy(ScrollBarPolicy.ALWAYS); 
    sp.setFitToWidth(true); 
    sp.setFitToHeight(true); 
    sp.vvalueProperty().addListener((ObservableValue<? extends Number> ov, Number old_val, Number new_val) -> { 
     if (new_val.doubleValue() >= sp.getVmax()) { 
      back.setVisible(true); 
     } 
     if (new_val.doubleValue() < sp.getVmax()) { 
      back.setVisible(false); 
     } 
    });   
} 

Da Sie nur eine vertikale Bildlaufleiste verwendet haben, nehme ich an Sie nicht über die horizontale Leiste brauchen und ich nehme auch Sie Ihre Schaltfläche sichtbar am Ende Ihres Bildes. Rufen Sie die Methode auf Ihrer initialize() Methode Ihres Controllers auf.