Kihagyás

3. gyakorlat

Táblázatok használata a JavaFX-ben A JavaFX grafikus felületi keretrendszer lehetővé teszi, hogy kényelmesen és hatékonyan kezeljünk adattáblákat. Ebben a leckében megismerkedünk a TableView használatával, mely egy rendkívül rugalmas komponens az adatok tabuláris megjelenítésére.

TableView létrehozása

A TableView létrehozása során meg kell adnunk egy generikus paramétert, amely meghatározza, hogy milyen típusú objektumokat fogunk a táblázatban tárolni. Például, ha diákok listáját szeretnénk megjeleníteni, akkor egy Student típusú objektumot használhatunk.

1
2
3
4
5
6
TableView<Student> table = new TableView<>();
ObservableList<Student> data = FXCollections.observableArrayList(
    new Student("John Doe", 20),
    new Student("Jane Doe", 22)
);
table.setItems(data);

A táblázat adatait egy ObservableList tartalmazza, melyet nekünk kell beállítani, feltölteni. Ez megtehető, pl a setItems() hívással.

A setItems és getItems függvények segítségével a táblázat adatai frissíthetőek, pl. szűrés alkalmával.

Oszlopok hozzáadása

Oszlopok hozzáadásához a TableColumn osztályt használjuk, mely szintén generikus. Az első paramétere a sor típusa (a TableView-ban használt típus), a második a cellában tárolt adat típusa. Az oszlopok adatforrását a setCellValueFactory metódussal adjuk meg, ahol a PropertyValueFactory segítségével automatikusan az adott getter metódushoz köthetjük az oszlop értékét.

1
2
3
4
5
6
7
TableColumn<Student, String> nameColumn = new TableColumn<>("Név");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

TableColumn<Student, Integer> ageColumn = new TableColumn<>("Életkor");
ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));

table.getColumns().addAll(nameColumn, ageColumn);

Jelölőnégyzet hozzáadása az oszlophoz

Boolean típusú adatok megjelenítésére jelölőnégyzetet (CheckBox) használhatunk egy oszlopban. Ehhez egy külön cella factory-t kell definiálnunk:

1
2
3
4
5
6
7
8
9
TableColumn<Student, Boolean> consentColumn = new TableColumn<>("Hozzájárulás");

consentColumn.setCellFactory( CheckBoxTableCell.forTableColumn(consentColumn) );
consentColumn.setCellValueFactory(cellData -> {
            Student item = cellData.getValue();
            SimpleBooleanProperty property = new SimpleBooleanProperty(item.isConsent());
            // kell ez a property, hogy ne csak TRUE/FALSE legyen a tablazat kiiratasa. Az alap PropertyValueFactory TRUE/FALSE-ra rakna
            return property;
        });

Sorok egyedi elkészítése

Lehetőségünk van azt is megadni, hogy az egyes sorok hogyan készüljenek el, pl. ha egy Listenert szeretnénk a sorra kötni. Ezt egy RowFactory megadásával tehetjük meg.

A row factory egy TableRow elemet fog elkészíteni, ugyanolyan generikussal mint az oszlopok első paramétere. Ezután az adott sort tetszés szeriont állíthatjuk be, pl. egy listenert rakhatunk a sorra.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
table.setRowFactory( tv -> {
            var row = new TableRow<Student>();
            row.setOnMouseClicked( click -> {
                var student = row.getItem(); // elkérhető a sorban tárolt objektum
                Dialog<Void> dialog = new Dialog<>();
                dialog.setTitle("Eredmények - " + student.getNev());
                VBox root = new VBox(new Text("Kapcsolodo információk: todo"));
                dialog.getDialogPane().setContent(root);
                dialog.getDialogPane().getButtonTypes().add(ButtonType.CLOSE);
                dialog.showAndWait();
            });
            return row;
        });

Utolsó frissítés: 2024-03-06 13:12:22