JavaFX Pagination

JaninaSt

Aktives Mitglied
Hallo!

Ich verwende die Klasse Pagination mit folgender Style Klasse: Pagination.STYLE_CLASS_BULLET

Jeder Page Indicator hat dabei einen Tooltip, indem als Text die jeweilige Seite angezeigt wird.

Ist es möglich auf die Tooltips zuzugreifen um den Text zu ändern? Und wenn ja wie?

Danke.
 

knilch

Bekanntes Mitglied
Hi,
Die Tooltips werden auf die Buttons (linker und rechter Button) sowie auf die ToggleButtons (das sind die Buttons, die für jede Page erstellt wird) registiert. Das Pagination, d.h. das grafische Layout von dieser View wird durch css sowie diversen Abstrakten Klassen beim Aufbau durchgeführt. Das Ändern vom Tooltip für die ToggleButtons sowie der Buttons (rechts und links) ist nicht so einfach möglich wie dies bei normalen Controlls der Fall ist, da die ToggleButtons und Buttons (rechts und links) automatisch durch die JVM erstellt werden.
Du hast aber eine Möglichkeit, die Tooltips zu ändern..
Hier mal ein Beispiel:
Java:
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Pagination;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.util.Callback;

public class PaginationSample extends Application {
   private Pagination pagination;
   private String[] fonts = new String[]{};

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

   public int itemsPerPage() {
     return 15;
   }

   public VBox createPage(int pageIndex) {   
     VBox box = new VBox(5);
     int page = pageIndex * itemsPerPage();
     for (int i = page; i < page + itemsPerPage(); i++) {
       Label font = new Label(fonts[i]);
       box.getChildren().add(font);
     }
     return box;
   }

   @Override
   public void start(final Stage stage) throws Exception {
     fonts = Font.getFamilies().toArray(fonts);   
     pagination = new Pagination(fonts.length/itemsPerPage(), 0);
     pagination.getStyleClass().add(Pagination.STYLE_CLASS_BULLET);

     pagination.setPageFactory(new Callback<Integer, Node>() {
       @Override
       public Node call(Integer pageIndex) {
         return createPage(pageIndex);   
       }
     });

     pagination.currentPageIndexProperty().addListener(
         observale -> System.out.printf("Neue Seite: %d", pagination.getCurrentPageIndex()).println());

     pagination.focusedProperty().addListener(new ChangeListener<Boolean>() {
       @Override
       public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
         int pageIndex = 1;
         int index = 0;
         String tooltipText = "";
         for(Node n1 : pagination.getChildrenUnmodifiable()) {
           if(n1 instanceof StackPane) {
             for(Node n2 : ((StackPane) n1).getChildren()) {
               if(n2 instanceof HBox) {
                 for(Node n3 : ((HBox) n2).getChildren()) {
                   // linker und rechter Button
                   if(n3 instanceof Button) {
                     if(index == 0)
                       ((Button) n3).setTooltip(new Tooltip("go left"));
                     else
                       ((Button) n3).setTooltip(new Tooltip("go right"));
                     index++;
                   }
                   // die buttons die fuer jede page erstellt werden.
                   else if(n3 instanceof ToggleButton) {
                     switch (pageIndex) {
                     case 0:
                       tooltipText = "Ich weiss noch nix...";
                       break;
                     case 1:
                       tooltipText = "Ich weiss auch noch nix...";
                       break;
                     case 2:
                       tooltipText = "Ich weiss es aber nicht mehr...";
                       break;
                     case 3:
                       tooltipText = "Ich weiss es ...";
                       break;
                     case 4:
                       tooltipText = "Ich hab es schon mal gewusst...";
                       break;
                     case 5:
                       tooltipText = "verflixt, ich hab's doch gewusst...";
                       break;
                     case 6:
                       tooltipText = "Ich hab schon alles vergessen...";
                       break;
                     default:
                       tooltipText = "doh...";
                       break;
                     }
                     
                     ((ToggleButton) n3).setTooltip(new Tooltip(tooltipText));
                     
                     pageIndex++;
                   }
                 }
               }
             }
           }
         }
       }
     });
     
     AnchorPane anchor = new AnchorPane();
     AnchorPane.setTopAnchor(pagination, 10.0);
     AnchorPane.setRightAnchor(pagination, 10.0);
     AnchorPane.setBottomAnchor(pagination, 10.0);
     AnchorPane.setLeftAnchor(pagination, 10.0);
     anchor.getChildren().addAll(pagination);
     Scene scene = new Scene(anchor);
     stage.setScene(scene);
     stage.setTitle("PaginationSample");
     stage.show();
   }
}
Wie geschrieben, ist das nur eine mögliche Variante. Kann sein, dass du diese verwenden kannst, oder noch anpassen musst, damit du das gewünschte verhalten bekommst.
Viel Spass beim Probieren...
Gruss Knilch
 
Zuletzt bearbeitet:

knilch

Bekanntes Mitglied
Noch eine Info
anstelle, dass bei einem Change vom pagination.focusedProperty(...) die tooltips erstellt werden, kannst du das auch so machen, dass die Tooltips erstellt werden, sobald die Maus in die pagination eintritt:
Java:
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Pagination;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.Tooltip;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.util.Callback;

public class PaginationSample extends Application {
    private Pagination pagination;
    private String[] fonts = new String[]{};

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

    public int itemsPerPage() {
        return 15;
    }

    public VBox createPage(int pageIndex) {       
        VBox box = new VBox(5);
        int page = pageIndex * itemsPerPage();
        for (int i = page; i < page + itemsPerPage(); i++) {
            Label font = new Label(fonts[i]);
            box.getChildren().add(font);
        }
        return box;
    }

    @Override
    public void start(final Stage stage) throws Exception {
        fonts = Font.getFamilies().toArray(fonts);     
        pagination = new Pagination(fonts.length/itemsPerPage(), 0);
        pagination.getStyleClass().add(Pagination.STYLE_CLASS_BULLET);

        pagination.setPageFactory(new Callback<Integer, Node>() {
            @Override
            public Node call(Integer pageIndex) {
                return createPage(pageIndex);              
            }
        });

        pagination.currentPageIndexProperty().addListener(
                observale -> System.out.printf("Neue Seite: %d", pagination.getCurrentPageIndex()).println());
       
        pagination.setOnMouseEntered((MouseEvent event) -> {
            setupTooltips();
        });

        AnchorPane anchor = new AnchorPane();
        AnchorPane.setTopAnchor(pagination, 10.0);
        AnchorPane.setRightAnchor(pagination, 10.0);
        AnchorPane.setBottomAnchor(pagination, 10.0);
        AnchorPane.setLeftAnchor(pagination, 10.0);
        anchor.getChildren().addAll(pagination);
        Scene scene = new Scene(anchor);
        stage.setScene(scene);
        stage.setTitle("PaginationSample");
        stage.show();   
    }
   
    /**
     * Method to set the tooltips for the pagination-buttons
     */
    private void setupTooltips() {
        int pageIndex = 1;
        int index = 0;
        String tooltipText = "";
        for(Node n1 : pagination.getChildrenUnmodifiable()) {
            if(n1 instanceof StackPane) {
                for(Node n2 : ((StackPane) n1).getChildren()) {
                    if(n2 instanceof HBox) {
                        for(Node n3 : ((HBox) n2).getChildren()) {
                            // linker und rechter Button
                            if(n3 instanceof Button) {
                                if(index == 0)
                                    ((Button) n3).setTooltip(new Tooltip("go left"));
                                else
                                    ((Button) n3).setTooltip(new Tooltip("go right"));
                                index++;
                            }
                            // die buttons die fuer jede page erstellt werden.
                            else if(n3 instanceof ToggleButton) {
                                switch (pageIndex) {
                                case 0:
                                    tooltipText = "Ich weiss noch nix...";
                                    break;
                                case 1:
                                    tooltipText = "Ich weiss auch noch nix...";
                                    break;
                                case 2:
                                    tooltipText = "Ich weiss es aber nicht mehr...";
                                    break;
                                case 3:
                                    tooltipText = "Ich weiss es ...";
                                    break;
                                case 4:
                                    tooltipText = "Ich hab es schon mal gewusst...";
                                    break;
                                case 5:
                                    tooltipText = "verflixt, ich hab's doch gewusst...";
                                    break;
                                case 6:
                                    tooltipText = "Ich hab schon alles vergessen...";
                                    break;
                                default:
                                    tooltipText = "doh...";
                                    break;
                                }
                                ((ToggleButton) n3).setTooltip(new Tooltip(tooltipText));
                                pageIndex++;
                            }
                        }
                    }
                }
            }
        }
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Pagination - page indicator AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben