2016-07-09 4 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()' вы устанавливаете 'setOnScroll' этапа для вызова' moveImage() 'на прокрутке. Затем в '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() метод вашего контроллера.

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