JavaFX formatowanie komórek ListView

0

user image
Jest to jeden (pionowy) panel który zawiera dwa inne:

  • jeden pionowy który zawiera w sobie tylko ListView ułożone poziomo (na czerwono)
  • jeden poziomy (na zielono) zawierający 6 pionowych ListView (na niebiesko)

Mam problem przy formatowaniu poziomego ListView na górze (na czerwono). Otóż owe numerki są to wczytane elementy ImageView do ListView (docelowo będą tam loga stacji telewizyjnych). Chciałbym (przy pomocy odpowiedniego formatowania) aby każdy z numerków (obrazków) był bezpośrednio nad jedną z kolumn (ListView pionowych-niebieskich).
Próbowałem css: -fx-alignment: CENTER;, -fx-cell-size: Xpx;,"-fx-padding: TOP RIGHT BOTTOM LEFT ;, logaProgramowListView.setFixedCellSize(X);. Urywki w których odwołuję się do w/w elementów:

(...) logaProgramowListView = new ListView<>();
        //logaProgramowListView.setFixedCellSize();
        //logaProgramowListView.setPrefHeight(90);
        //logaProgramowListView.styleProperty().set("-fx-padding: 0 30 0 30;");
        logaProgramowListView.setOrientation(Orientation.HORIZONTAL);
        logaProgramowPane = new HBox(logaProgramowListView);
Image logoKanalu = new Image("file:C:\\Users\\bartek\\IdeaProjects\\ProgramyTV\\images\\loga\\" + nazwaKanalu + ".png");
            ImageView logoKanluImageView = new ImageView(logoKanalu);
            //logoKanluImageView.setFitWidth(133);
            //logoKanluImageView.setFitHeight(80);
            //logoKanluImageView.setPreserveRatio(true);
            logaProgramowListView.getItems().add(logoKanluImageView);
(...)
        for(int i=0; i<kanalyListView.size(); i++){
            kanalyListView.get(i).setOrientation(Orientation.VERTICAL);
            kanalyListView.get(i).setPrefWidth(150);
            MultipleSelectionModel<String> selectionModel = kanalyListView.get(i).getSelectionModel();
            selectionModel.setSelectionMode(SelectionMode.MULTIPLE);
        }(...)

Oczywiście w/w próby nie dają pożądanych efektów, stąd mój post. Będę bardzo wdzięczny za pomoc.

1

Nie utrudniaj sobie życia i zmień podejście. Zamiast wymuszać odpowiednią pozycję obrazków w górnym panelu pozbądź się go:) Niech program dla każdej stacji będzie osobnym komponentem - w tym przypadku VBox. Do każdego VBoxa dodaj jako pierwszy AnchorPane o odpowiednim rozmiarze i do niego wrzuć logo stacji. Jako następny komponent w VBoxie dodaj ListView, w którym wyświetlisz program. Wszystkie panele umieść obok siebie za pomocą HBoxa.

0

Tak tylko dla sprawdzenia czy dobrze zrozumiałem:

        AnchorPane anchorPaneTest = new AnchorPane();
        Image testImage = new Image("file:C:\\Users\\bartek\\IdeaProjects\\ProgramyTV\\images\\Polsat.png");
        ImageView testImageView = new ImageView(testImage);
        testImageView.setPreserveRatio(true);
        anchorPaneTest.getChildren().add(testImageView);
        //AnchorPane.setTopAnchor(testImageView, 10.0);

        ListView<String> testListView = new ListView();
        testListView.getItems().addAll("To pierwszy element","To drugi element","to trzeci element","to czwarty element","to piąty element","to szósty element","to siódmy element");
        testListView.setPrefWidth(150);
        testListView.setOrientation(Orientation.VERTICAL);

        VBox testVbox = new VBox(anchorPaneTest, testListView);

//podobnie drugi VBox np. testVBox2

        HBox hboxTest = new HBox(testVbox, testVbox2);

        Scene sceneTest = new Scene(hboxTest);

I następne przez rozmiar każdego obrazka oraz metodę set[top,right,bottom,left]Anchor() odpowiednio je dopasować. O to chodziło ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1