Dies ist eine alte Version des Dokuments!


JavaFX

Accordion, alle offen

Das JavaFX Accordion kann immer nur ein Element zur Zeit öffnen. Mit wenig Aufwand lässt sich ein eignes Accordion entwickeln, bei welchem mehrere/alle Elemente offen sein können:


Eine einfache Variante, die auf das Wesentliche beschränkt ist:

package com.sowas.javawiki.javafx;
 
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
 
public class MyFxApplication extends Application {
 
   @Override
   public void start(Stage mainStage) {
      mainStage.setTitle("JavaFX-Accordion");
 
      VBox vBox = new VBox();
      vBox.getChildren().add(new TitledPane("View 1", new Label("1")));
      vBox.getChildren().add(new TitledPane("View 2", new Label("2")));
      vBox.getChildren().add(new TitledPane("View 3", new Label("3")));
 
      Scene scene = new Scene(vBox);
 
      mainStage.setScene(scene);
      mainStage.show();
   }
 
   public static void main(String[] args) {
      launch(args);
   }
}



Eine Accordion-Klasse, die (ein bisschen) kompatibel zur JavaFX-Klasse Accordion ist:

package com.sowas.javawiki.javafx;
 
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.VBox;
 
import java.util.List;
 
public class MultiOpenAccordion extends ScrollPane {
   private ObservableList<TitledPane> panes = FXCollections.observableArrayList();
   VBox vBox = new VBox();
 
   public NavigatorAccordion() {
      panes.addListener((ListChangeListener<TitledPane>) c -> {
         while (c.next()) {
            if (c.wasAdded()) {
               vBox.getChildren().addAll(c.getAddedSubList());
            }
            if (c.wasRemoved()) {
               vBox.getChildren().removeAll(c.getRemoved());
            }
            if (c.wasReplaced()) {
            }
            if (c.wasUpdated()) {
            }
            if (c.wasPermutated()) {
            }
         }
      });
      setContent(vBox);
   }
 
   public List<TitledPane> getPanes() {
      return panes;
   }
 
   public void setExpandedPane(TitledPane expandedPane) {
      expandedPane.setExpanded(true);
   }
}


Eine Verwendung der Klasse könnte so aussehen:

MultiOpenAccordion moAccordion = new MultiOpenAccordion();
moAccordion.add(new TitledPane("Test 1", new Label("1")));
moAccordion.add(new TitledPane("Test 2", new Label("2")));
moAccordion.add(new TitledPane("Test 3", new Label("3")));



Stichworte:

JavaFX Accordion, alle offen, mehere gleichzeitig offen, Beispiel

Eigene Werkzeuge
Werkzeuge

gratis Counter by GOWEB
seit 9.10.2007