2016-07-09 3 views
1

私のコードを修正しましたが、今はマウスのスクロールで動作しますが、スクロールすることができます。これは、 "val + = sb.getUnitIncrement()"を設定したので発生します。そのため、スクロールアップまたはスクロールして、 "val - = sb.unitIncrement()"までスクロールすると検出する条件を挿入すると考えました。問題は、私がその方法を見つけることができなかったことです。私は何を使うべきですか?私のシーンのScrollEvent

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

'scroll()'では、スクロールで 'moveImage()'を呼び出すステージの 'setOnScroll'を設定します。次にmoveImageでリスナーを何度も何度も追加しています... – DVarga

+0

私は質問を更新しました –

+1

画像を 'ScrollPane'に入れて、それをあなたに任せてもらえませんか? – DVarga

答えて

0

DVargaに同意すると、ScrollPaneを使用すると簡単です。 FXMLファイルを変更してScrollBarを削除し、ScrollPaneを追加します。そして、このコードを試してみてください。

@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); 
     } 
    });   
} 

をあなたが唯一の垂直スクロールバーを使用していたので、私はあなたが水平バーを必要としないと仮定し、私はまた、あなたのイメージの終わりに、あなたのボタンが見えるとします。 コントローラのinitialize()メソッドのメソッドを呼び出します。

関連する問題