JavaFX Gridpane mit gleich großen Spalten

Lucaaa

Bekanntes Mitglied
Hallo!
Ich möchte einen Stundenplan machen, und die Wochentage (Mo bis So bzw Fr) sollen die gleiche Breite haben. Jedoch sollen die Spalten breiter werden, wenn sich das fenster vergrößert.
Die spalten dürfen auf keinen fall breiter werden, egal was drin steht.

Erstmal das GridPane:

Java:
package com.ludevstudio.schoolmanager;
import java.util.ResourceBundle;
import javafx.geometry.Pos;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.TilePane;
import javafx.scene.layout.VBox;
public class Schedule extends GridPane{
 ResourceBundle bundle;
 
 int days;
  int houers;
 
 public Schedule(int houers, boolean weekend) {
  setAlignment(Pos.CENTER);
  setGridLinesVisible(true);
  
  
  bundle = ResourceBundle.getBundle("Bundle");
  
  if(weekend) {
   this.days = 7;
  } else {
   this.days = 5;
  }
  this.houers = houers;
  
  
  createHeader();
  
  
  setLesson(4, 4);
 
  scaleColumnWidth();
 }
 
 
 public void scaleColumnWidth() {
  double width = 0.08;
  ColumnConstraints c1 = new ColumnConstraints();
  c1.setPercentWidth(width);
  ColumnConstraints c2 = new ColumnConstraints();
  c2.setPercentWidth(width);
  ColumnConstraints c3 = new ColumnConstraints();
  c3.setPercentWidth(width);
  ColumnConstraints c4 = new ColumnConstraints();
  c4.setPercentWidth(width);
  ColumnConstraints c5 = new ColumnConstraints();
  c5.setPercentWidth(width);
  ColumnConstraints c6 = new ColumnConstraints();
  c6.setPercentWidth(width);
  ColumnConstraints c7 = new ColumnConstraints();
  c7.setPercentWidth(width);
  ColumnConstraints c8 = new ColumnConstraints();
  c8.setPercentWidth(width);
 
  getColumnConstraints().addAll(c1,c2,c3,c4,c5,c6,c7,c8);
 }
 
 
 
 public Label dayCell(int day) {
  String[] days = new String[] {
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Monday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Tuesday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Wednesday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Thursday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Friday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Saturday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Sunday")
   };
  
  Label cell = new Label(days[day]);
  cell.setStyle("-fx-background-color: #00f; -fx-text-fill: #fff; -fx-font-weight: 700; -fx-padding: 7 15 7 15; -fx-font-size: 2em;");
  GridPane.setHgrow(cell, Priority.ALWAYS);
  
  cell.setMaxWidth(Double.MAX_VALUE);
  return cell;
 }
 
 
 
 public Label houerCell(int houer) {
  Label cell = new Label(houer + ". Stunde");
  cell.setStyle("-fx-background-color: #00f; -fx-text-fill: #fff; -fx-font-weight: 700; -fx-padding: 7 15 7 15; -fx-font-size: 2em;");
  GridPane.setHgrow(cell, Priority.ALWAYS);
  
  cell.setMaxWidth(Double.MAX_VALUE);
  return cell;
 }
 
 
 
 public Label createLesson() {
  Label cell = new Label();
  
  
  return cell;
 }
 
 private void createHeader() {
  for(int i=0; i<days; i++) {
   add(dayCell(i), (i+1), 0);
  }
  for(int i=0; i<houers; i++) {
   add(houerCell(i+1), (0), (i+1));
  }
 }
 
 
 public void setLesson(int day, int houer) {
  BorderPane cell = new BorderPane();
  cell.setStyle("-fx-background-color: red; -fx-padding: 10;");
  
  Label labName = new Label("Naturwissenschaften");
  labName.setStyle("-fx-font-size: 2em;  -fx-font-weight: 700; -fx-text-fill: white; -fx-background-color: red; -fx-max-height: infinity");
  Label labRoom = new Label("315");
  labRoom.setStyle("-fx-font-weight: 700; -fx-text-fill: white; -fx-background-color: red;");
  Label labTeacher = new Label("Brade");
  labTeacher.setStyle("-fx-font-weight: 700; -fx-text-fill: white; -fx-background-color: red; ");
  cell.setLeft(labName);
  
  VBox cellInfo = new VBox();
  cellInfo.getChildren().add(labTeacher);
  cellInfo.getChildren().add(labRoom);
  
  cell.setRight(cellInfo);
  
  
  GridPane.setHgrow(cell, Priority.ALWAYS);
  add(cell, day+1, houer+1);
 }
 
}

Ich habe das hier
Java:
public void scaleColumnWidth() {
  double width = 0.08;
  ColumnConstraints c1 = new ColumnConstraints();
  c1.setPercentWidth(width);
  ColumnConstraints c2 = new ColumnConstraints();
  c2.setPercentWidth(width);
  ColumnConstraints c3 = new ColumnConstraints();
  c3.setPercentWidth(width);
  ColumnConstraints c4 = new ColumnConstraints();
  c4.setPercentWidth(width);
  ColumnConstraints c5 = new ColumnConstraints();
  c5.setPercentWidth(width);
  ColumnConstraints c6 = new ColumnConstraints();
  c6.setPercentWidth(width);
  ColumnConstraints c7 = new ColumnConstraints();
  c7.setPercentWidth(width);
  ColumnConstraints c8 = new ColumnConstraints();
  c8.setPercentWidth(width);
  getColumnConstraints().addAll(c1,c2,c3,c4,c5,c6,c7,c8);
 }

und das hier:

Java:
public void scaleColumnWidth() {
  for(int i = 0; i<days+1; i++) {
   ColumnConstraints cc = new ColumnConstraints();
   cc.setPercentWidth(1/(days+1));
   getColumnConstraints().add(cc);
  }
 }
versucht.

Beim ersten wird das Gridpane gar nicht angezeigt, und beim zweiten, überragt es den container und die Spaltenbreite wird auch größer, wenn etwas drin ist, das breiter ist als die spalte

Hoffe mir kann wer helfen.
Danke schon mal 🙂
 
setPercentWidth(100.0 / (days+1));
Das hab ich schon. es verhindert aber nicht, das sich die spalte verbreitert, wenn etwas darin ist, das breiter ist.
Die spalte muss gleich groß bleiben.
Momentan ist es so, dass wenn ich z.B. ein Label mit einemm sehr langen Text in eine zelle packe alle Spalten größer werden, das Gridpane dann jedoch rechts abgeschnitten ist.
 
Das hab ich schon. es verhindert aber nicht, das sich die spalte verbreitert, wenn etwas darin ist, das breiter ist.

a) das hast Du nicht (zumindest nicht geposted)
b) doch, natürlich

Java:
import java.time.DayOfWeek;
import java.time.format.TextStyle;
import java.util.Locale;

import javafx.application.*;
import javafx.scene.*;
import javafx.scene.control.Label;
import javafx.stage.*;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;


public class Test extends Application {
    public static void main(String[] args) {
        launch(args);
    }


    @Override
    public void start(Stage stage) {
        GridPane pane = new GridPane();
        double colWidth = 100.0 / 8.0;

        for (int i = 0; i < 8; i++) {
            ColumnConstraints cc = new ColumnConstraints();
            cc.setPercentWidth(colWidth);
            pane.getColumnConstraints().add(cc);
        }

        for (int i = 1; i < 8; i++) {
            String dow = DayOfWeek.of(i).getDisplayName(TextStyle.FULL, Locale.GERMAN);
            Label hdr = new Label(dow);
            pane.add(hdr, i, 0);
        }

        Scene scene = new Scene(pane, 800, 600);
        stage.setScene(scene);
        stage.show();
    }
}
 
) das hast Du nicht (zumindest nicht geposted)
b) doch, natürlich

Java:
package com.ludevstudio.schoolmanager;
import java.util.ResourceBundle;
import org.controlsfx.control.GridCell;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.control.Labeled;
import javafx.scene.control.OverrunStyle;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.TilePane;
import javafx.scene.layout.VBox;
public class Schedule extends GridPane  {
 ResourceBundle bundle;
 
 int days;
  int houers;
 
 public Schedule(int houers, boolean weekend) {
  setAlignment(Pos.CENTER);
  setStyle("-fx-background-color: white;");
  setGridLinesVisible(true);
  
  
  bundle = ResourceBundle.getBundle("Bundle");
  
  if(weekend) {
   this.days = 7;
  } else {
   this.days = 5;
  }
  this.houers = houers;
  
  
  createHeader();
  
  
  for(int i = 1; i<=days; i++) {
  for(int j = 1; j<=houers; j++) {
   setEmpty(i, j);
  } 
  }
 
  
  
  scaleColumnWidth();
  
 }
 
 
 public void scaleColumnWidth() {
  ColumnConstraints c = new ColumnConstraints();
  c.fillWidthProperty().set(true);
  getColumnConstraints().add(c);
  
  for(int i = 0; i<days; i++) {
   ColumnConstraints cc = new ColumnConstraints();
   cc.setHgrow(Priority.NEVER);
   cc.setPercentWidth(92/(days));
   
   getColumnConstraints().add(cc);
  }
 }
 
 
 
 public Label dayCell(int day) {
  String[] days = new String[] {
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Monday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Tuesday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Wednesday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Thursday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Friday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Saturday"),
    bundle.getString("MainWindow.Schedulepage.Schedule.Days.Sunday")
   };
  
  Label cell = new Label(days[day]);
  cell.setAlignment(Pos.CENTER);
  cell.setStyle("-fx-background-color: #00f; -fx-text-fill: #fff; -fx-font-weight: 700; -fx-padding: 7; -fx-font-size: 2em;");
  cell.setTextOverrun(OverrunStyle.CLIP);
  GridPane.setHgrow(cell, Priority.ALWAYS);
  
  cell.setMaxWidth(Double.MAX_VALUE);
  return cell;
 }
 
 
 
 
 
 public HBox houerCell(int houer) {
  HBox cell =new HBox();
  Label labHouer = new Label(houer + "");
  labHouer.setStyle("-fx-text-alignment: left; -fx-background-color: #00f; -fx-text-fill: #fff; -fx-font-weight: 700; -fx-padding: 7 0 7 4; -fx-font-size: 2em; -fx-max-width: infinity; -fx-max-height: infinity");
  labHouer.setAlignment(Pos.BASELINE_LEFT);
  GridPane.setHgrow(labHouer, Priority.ALWAYS);
  
  VBox timeBox = new VBox();
  timeBox.maxHeight(Double.MAX_VALUE);
  timeBox.maxWidth(Double.MAX_VALUE);
  timeBox.setAlignment(Pos.CENTER_RIGHT);
  timeBox.setStyle("-fx-margin: 0 5 0 0;");
  Label labBegin = new Label("12:30");
  labBegin.setStyle("-fx-text-fill: white; -fx-background-color: blue;");
  
  Label labEnd = new Label("13:45");
  labEnd.setStyle("-fx-text-fill: white; -fx-background-color: blue;");
  timeBox.getChildren().addAll(labBegin, labEnd);
  
  
  cell.getChildren().add(labHouer);
  cell.getChildren().add(timeBox);
  cell.setMaxWidth(Double.MAX_VALUE);
  
  cell.setStyle("-fx-background-color: blue; -fx-margin: 0 20 0 20; ");
  cell.setAlignment(Pos.CENTER_LEFT);
  return cell;
 }
 
 
 
 
 private void createHeader() {
  for(int i=0; i<days; i++) {
   add(dayCell(i), (i+1), 0);
  }
  for(int i=0; i<houers; i++) {
   add(houerCell(i+1), (0), (i+1));
  }
 }
 
 
 public void setLesson(int day, int houer, String subject, String teacher, String room, String color) {
  AnchorPane cell =new AnchorPane();
  cell.setStyle("-fx-background-color: "+color+"; -fx-padding: 10;");
  
  Label labName = new Label(subject);
  labName.setTextOverrun(OverrunStyle.CLIP);
  labName.setStyle("-fx-font-size: 200%;  -fx-font-weight: 700; -fx-text-fill: white; -fx-background-color: "+color+"; -fx-max-height: infinity");
  
  Label labRoom = new Label(room);
  labRoom.setStyle("-fx-font-weight: 700; -fx-text-fill: white; -fx-background-color: "+color+"; ");
  Label labTeacher = new Label(teacher.substring(0, 5));
  labTeacher.setStyle("-fx-font-weight: 700; -fx-text-fill: white; -fx-background-color: "+color+"; ");
  cell.setLeftAnchor(labName, 5d);
  
  
  cell.getChildren().add(labName);
  
  cell.setLeftAnchor(labTeacher, 2d);
  cell.setBottomAnchor(labTeacher, 2d);
  cell.getChildren().add(labTeacher);
  
  cell.setRightAnchor(labRoom, 2d);
  cell.setBottomAnchor(labRoom, 2d);
  cell.getChildren().add(labRoom);
  
  
  
  
  add(cell, day, houer);
 }

 public void setEmpty(int day, int houer) { 
  Label cell = new Label("");
  cell.setMaxHeight(Double.MAX_VALUE);
  cell.setMaxWidth(Double.MAX_VALUE);
  
  cell.setOnMouseClicked((MouseEvent t) -> {
        setLesson(GridPane.getColumnIndex(cell), GridPane.getRowIndex(cell), "abcdefghijklmnopqrstuvwxyz", "Meier", "PHY-1", "#0f0");
     });
  
  add(cell, day, houer);
  
 }
 
 
}
 

Anhänge

  • so darf es nicht sein.png
    so darf es nicht sein.png
    110,4 KB · Aufrufe: 56
  • so soll es bleiben.png
    so soll es bleiben.png
    116,4 KB · Aufrufe: 65
Java:
crollPane scroll = new ScrollPane();
 scroll.setContent((new Schedule(16, false)));
 scroll.setStyle("-fx-background-color: white;");
 scroll.setHbarPolicy(ScrollBarPolicy.NEVER);
 scroll.setVbarPolicy(ScrollBarPolicy.NEVER);
 scroll.setFitToHeight(true);
 scroll.setFitToWidth(true);
 scroll.setPadding(new Insets(0, 0, 20, 0));
 setCenter(scroll);
 
kann ich denn in einer GridView Nodes anzeigen? (Also so das es so aussieht wie jetzt? ich möchte die Zelen während der Laufzeit bearbeiten können!
Ja und ja.. sollte beides möglich sein. Hab es mal fix versucht sporadisch nachzubauen (vom Tabellendesign her).. das sollte eigentlich in die richtige Richtung gehen.
Java:
public class App extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("view.fxml"));

        Scene scene = new Scene(root, 1200,800);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Java:
public class ViewController implements Initializable {

    @FXML
    private TableColumn<String, String> timeColumn;
    ...

    @FXML
    private TableView<String> table;

    @Override
    public void initialize(URL location, ResourceBundle resources) { .. }
}
HTML:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>


<AnchorPane prefHeight="800.0" prefWidth="1200.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="timetable.ViewController">
   <children>
      <TableView fx:id="table" editable="true" layoutX="39.0" layoutY="41.0" prefHeight="714.0" prefWidth="1135.0" stylesheets="@view.css" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <columns>
          <TableColumn id="firstColumn" fx:id="timeColumn" maxWidth="100.0" minWidth="100.0" prefWidth="100.0" />
          <TableColumn fx:id="mondayColumn" prefWidth="327.0" text="Montag" />
            <TableColumn fx:id="tuesdayColumn" prefWidth="75.0" text="Dienstag" />
            <TableColumn fx:id="wednesdayColumn" prefWidth="75.0" text="Mittwoch" />
            <TableColumn fx:id="thursdayColumn" prefWidth="75.0" text="Donnerstag" />
            <TableColumn fx:id="fridayColumn" prefWidth="75.0" text="Freitag" />
        </columns>
         <columnResizePolicy>
            <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
         </columnResizePolicy>
      </TableView>
   </children>
</AnchorPane>

CSS:
.table-view .column-header {
    -fx-background-color: blue;
}

.table-view .column-header .label {
    -fx-text-fill: white;
    -fx-font-weight: bold;
}

.table-view .table-cell #firstColumn {
    -fx-background-color: blue;
}
 
Ja und ja.. sollte beides möglich sein. Hab es mal fix versucht sporadisch nachzubauen (vom Tabellendesign her).. das sollte eigentlich in die richtige Richtung gehen.
Danke aber das Ding macht mir Probleme.
Ich kann als Tabelleninhalt nur eine Liste aus Nodes setzen, und dann die Eigenschaften in jeder spalte anzeigen.
ich möchte aber pro Zelle ein Node anzeigen und nicht mit irgendwelchen CellFactories oder so.
Mit dem GridPane konnte ich per Klick die einzelnen Zellen austauschen, da sie aus Nodes bestanden. Ich kann mir noch nicht vorstellen, wie ich das mit der Tableview umsetzen kann.
 
Sorry, ich kann das Problem nicht nachvollziehen:

Java:
public class Gridpane extends Application {
  
    @Override
    public void start(Stage primaryStage) {
        GridPane pane = new GridPane();
        double w = 100.0 / 8.0;
        for (int i = 1; i <= 7; i++) {
            ColumnConstraints cc = new ColumnConstraints();
            cc.setPercentWidth(w);
            pane.getColumnConstraints().add(cc);
            String dow = DayOfWeek.of(i).getDisplayName(TextStyle.FULL, Locale.GERMAN);
            pane.add(new Label(dow), i, 0);
        }
      
        pane.add(new Label("Ein langer, langer Text, der in keine Spalte passt"), 2, 1);
      
        ScrollPane scroll = new ScrollPane(pane);
        scroll.setFitToWidth(true);
      
        Scene scene = new Scene(scroll, 600, 400);
      
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
  
}
 
Sorry, ich kann das Problem nicht nachvollziehen:
Wenn ich das Label so hinzufüge wie du, also vor dem Anzeigen, funktioniert alles. Das Problem ist, das ich das Label (Oder cell) vom Benutzer hinzufügen lassen möchte. D.h. nach dem anzeigen der Stage. Wenn ich das mache, passiert das, was auf den Bildern (paar posts vorher) zusehen ist.
 
Java:
public class Gridpane extends Application {

    @Override
    public void start(Stage primaryStage) {
        final GridPane pane = new GridPane();
        Button b = new Button("Add");
        b.setOnAction(e -> {
            pane.add(new Label("Langes, langes, langes Label"), 1, 2);
        });
        pane.add(b, 0, 0);

        double w = 100.0 / 8.0;
        for (int i = 1; i <= 7; i++) {
            ColumnConstraints cc = new ColumnConstraints();
            cc.setPercentWidth(w);
            pane.getColumnConstraints().add(cc);
            String dow = DayOfWeek.of(i).getDisplayName(TextStyle.FULL, Locale.GERMAN);
            pane.add(new Label(dow), i, 1);
        }

        pane.add(new Label("Ein langer, langer Text, der in keine Spalte passt"), 2, 2);

        ScrollPane scroll = new ScrollPane(pane);
        scroll.setFitToWidth(true);

        Scene scene = new Scene(scroll, 600, 400);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

}
 
Also wenn ich das label hinzufüge
Java:
cell.setOnMouseClicked((MouseEvent t) -> {
       // setLesson(GridPane.getColumnIndex(cell), GridPane.getRowIndex(cell), "abcdefghijklmnopqrstuvwxyz", "Meier", "PHY-1", "#0f0");
   add(new Label("Ein sehr sehr langer Text, der in keine Spalte passt!"),GridPane.getColumnIndex(cell), GridPane.getRowIndex(cell));
 
 
  });
Ist alles ok.
Aber wenn ich das hier hinzufüge
Java:
public void setLesson(int day, int houer, String subject, String teacher, String room, String color) {
  AnchorPane cell =new AnchorPane();
  cell.setStyle("-fx-background-color: "+color+"; -fx-padding: 10;");
 
  Label labName = new Label(subject);
  labName.setTextOverrun(OverrunStyle.CLIP);
  labName.setStyle("-fx-font-size: 200%;  -fx-font-weight: 700; -fx-text-fill: white; -fx-background-color: "+color+"; -fx-max-height: infinity");
 
  Label labRoom = new Label(room);
  labRoom.setStyle("-fx-font-weight: 700; -fx-text-fill: white; -fx-background-color: "+color+"; ");
  Label labTeacher = new Label(teacher.substring(0, 5));
  labTeacher.setStyle("-fx-font-weight: 700; -fx-text-fill: white; -fx-background-color: "+color+"; ");
  cell.setLeftAnchor(labName, 5d);
 
 
  cell.getChildren().add(labName);
 
  cell.setLeftAnchor(labTeacher, 2d);
  cell.setBottomAnchor(labTeacher, 2d);
  cell.getChildren().add(labTeacher);
 
  cell.setRightAnchor(labRoom, 2d);
  cell.setBottomAnchor(labRoom, 2d);
  cell.getChildren().add(labRoom);
 
 
 
 
  add(cell, day, houer);
 
 }

verbreitert es die Tabelle (Wiedermal die Bilder)
 
Ja, das ist so auch dokumentiert: "If a child is anchored on opposite sides (and is resizable), the anchor pane will resize it to maintain both offsets, otherwise the anchor pane will resize it to its preferred size."

Lösung: beide (EDIT: links/rechts) Anker setzen.
 
Nimm bitte nicht nur die Lösung, sondern in erster Linie den Weg dorthin mit:

Du hattest das GridPane als Ursache des Übels vermutet. Darauf hin habe ich ein minimales Beispiel implementiert -> funktioniert. Dann hast Du die ScrollPane ins Spiel gebracht. Beispiel um ScrollPane erweitert -> funktioniert. Dann kamst Du mit der AnchorPane um die Ecke. Beispiel um AnchorPane erweitert -> funktioniert nicht mehr -> Problem liegt also bei der AnchorPane -> Doku konsultieren -> alles klar.

Was wir hier gemacht haben, ist eine minimale Implementierung, die gerade so viel enthält, dass der Fehler auftaucht. Das kannst Du künftig prima selbst machen, dann kommst Du in der Regel binnen weniger Minuten auf eine Lösung. Und wenn nicht, hast Du für das Forum eine solide Grundlage in Form eines minimalen Beispiels.
 

Neue Themen


Zurück
Oben