2015-06-26 5 views
2

Я разрабатываю приложение чата на java, и я хочу использовать функцию, используемую facebook для извлечения истории чата, когда пользователь прокручивает вверх. Я попробовал действие «на прокрутке», которое срабатывает при каждом прокрутке вверх или вниз по полосе прокрутки. Теперь я хочу выполнить событие Fire action только в том случае, когда полоса прокрутки достигает вершины, как в поле чата facebook.Как запустить событие при прокрутке вверх, javafx

+1

Можете ли вы показать нам код? –

ответ

0

Вот пример того, что вы хотите. Я надеюсь, что это поможет вам.

import javafx.application.Application; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class ScrollUtil extends Application 
{ 
    private boolean scrollToBottom = false; 
    private boolean scrollToTop = false; 

    public static void main(String[] args) 
    { 
     launch(args); 
    } 

    @Override 
    public void start(final Stage stage) throws Exception 
    { 

     final VBox root = new VBox(); 
     final ScrollPane scrollPane = new ScrollPane(); 

     final VBox vBox = new VBox(); 
     vBox.setAlignment(Pos.BOTTOM_CENTER); 

     scrollPane.setContent(vBox); 

     scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); 

     Button button = new Button("add"); 
     Button button3 = new Button("scroll up"); 

     button3.setOnAction(new EventHandler<ActionEvent>() 
     { 
      @Override 
      public void handle(ActionEvent actionEvent) 
      { 
       scrollToTop = true; 
       scrollPane.setVvalue(scrollPane.getVmin()); 
       System.out.println("vmin= "+scrollPane.getVmin() + "; vmax = " + scrollPane.getVmax() + "; vvalue" + scrollPane.getVvalue()); 
      } 
     }); 

     button.setOnAction(new EventHandler<ActionEvent>() 
     { 
      @Override 
      public void handle(ActionEvent actionEvent) 
      { 
       vBox.getChildren().add(new Label("hallo")); 
       scrollToBottom = true; 
       //System.out.println(scrollPane.getVmin() + "; max = " + scrollPane.getVmax() + "; " + scrollPane.getVvalue()); 
      } 
     }); 

     scrollPane.setVvalue(scrollPane.getVmax()); 
     scrollPane.vvalueProperty().addListener(new ChangeListener<Number>() 
     { 
      @Override 
      public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) 
      { 
      if(scrollToBottom) 
      { 
       scrollPane.setVvalue(scrollPane.getVmax()); 
       scrollToBottom = false; 
      } 

      if(newValue.doubleValue() ==0) 
      { 
       vBox.getChildren().add(new Label("hallo")); 
       System.out.println("min value ="+scrollPane.getVmin()); 
       //scrollPane.setVvalue(scrollPane.getVmin()); 
       scrollToTop = true; 
       System.out.println("now get the chat history"); 
      } 
      } 
     }); 

     Button button2 = new Button("scroll"); 
     button2.setOnAction(new EventHandler<ActionEvent>() 
     { 
      @Override 
      public void handle(ActionEvent actionEvent) 
      { 
       scrollPane.setVvalue(Double.MAX_VALUE); 
      } 
     }); 

     root.getChildren().addAll(scrollPane, button, button2, button3); 
     Scene scene = new Scene(root); 
     stage.setScene(scene); 
     stage.show(); 
    } 
} 
0

Предполагая, что у вас есть ScrollPane, вы можете наблюдать vvalueProperty его:

scrollPane.vvalueProperty().addListener(
    (ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> { 
    if(newValue.doubleValue() == 0){ 
     System.out.println("AT TOP"); 
     // load more items 
    } 
}); 

и вы можете также перейти к нижней с

scrollPane.setVvalue(scrollPane.getVmax()); 

первоначально.

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