Benutzer-Werkzeuge

Webseiten-Werkzeuge


usercontent:table-auswahl_beispiel

Table Auswahl Beispiel

Das Beispiel demonstriert wie man Daten in einer Tabelle, die mittels FXML angelegt wurde, angezeigt werden. Zudem zeigt es wie die Auswahl einer Zeile erkannt wird. Der Button gibt ein Feld der ausgewählten Zeile im Label aus.

*
 * Java FX8 Beispielcode 
 * (c) http://www.javacode.sought.de/start
 * Verwendung mit Quellenangabe
 */
package javafxtestcontrols;
 
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
 
/**
 *
 * @author Frank (http://www.javacode.sought.de/start)
 */
public class FXMLDocumentController implements Initializable {
 
    @FXML
    private Label label;
 
    @FXML
    private TableView tbl_test;
 
    @FXML
    private void handleButtonAction(ActionEvent event) {
        Laender laender = (Laender) tbl_test.getSelectionModel().getSelectedItem();
 
        if (laender != null) {
            label.setText("Ausgewählter Eintrag:" + laender.nahrungProperty().getValue());
            System.out.println(laender.nahrungProperty().getValue());
        } else {
            label.setText("keine Auswahl");
        }
 
    }
 
    private void tablesample() {
        final ObservableList<Laender> data = FXCollections.observableArrayList(
                new Laender("DE", "Deutschland", "Schweinebraten"),
                new Laender("IT", "Italien", "Spaghetti"),
                new Laender("CH", "Schweiz", "Linsensuppe"),
                new Laender("FR", "Frankreich", "Wein")
        );
        TableColumn lkCol = new TableColumn();
        lkCol.setText("Ländercode");
        lkCol.setMinWidth(80);
        lkCol.setCellValueFactory(new PropertyValueFactory("lk"));
        TableColumn landCol = new TableColumn();
        landCol.setText("Land");
        landCol.setMinWidth(110);
        landCol.setCellValueFactory(new PropertyValueFactory("land"));
        TableColumn nahrungCol = new TableColumn();
        nahrungCol.setText("Nahrung");
        nahrungCol.setMinWidth(200);
        nahrungCol.setCellValueFactory(new PropertyValueFactory("nahrung"));
 
        tbl_test.setItems(data);
        tbl_test.getColumns().addAll(lkCol, landCol, nahrungCol);
    }
 
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
 
        tbl_test.getColumns().clear();
        tablesample();
 
    }
 
    public static class Laender {
 
        private final StringProperty laendercode;
        private final StringProperty land;
        private final StringProperty lieblingsnahrung;
 
        private Laender(String lk, String lname, String nahrung) {
            this.laendercode = new SimpleStringProperty(lk);
            this.land = new SimpleStringProperty(lname);
            this.lieblingsnahrung = new SimpleStringProperty(nahrung);
        }
 
        public StringProperty lkProperty() {
            return laendercode;
        }
 
        public StringProperty landProperty() {
            return land;
        }
 
        public StringProperty nahrungProperty() {
            return lieblingsnahrung;
        }
    }
 
}

Die zugehörige FXML Datei

<?xml version="1.0" encoding="UTF-8"?>
 
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
 
<AnchorPane id="AnchorPane" prefHeight="371.0" prefWidth="474.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javafxtestcontrols.FXMLDocumentController">
    <children>
        <Button fx:id="button" layoutX="203.0" layoutY="268.0" onAction="#handleButtonAction" text="Click Me!" />
        <Label fx:id="label" layoutX="49.0" layoutY="299.0" minHeight="16" minWidth="69" />
        <TableView fx:id="tbl_test" layoutX="49.0" layoutY="35.0" prefHeight="200.0" prefWidth="368.0">
            <columns>
                <TableColumn prefWidth="75.0" text="C1" />
                <TableColumn prefWidth="75.0" text="C2" />
            </columns>
        </TableView>
    </children>
</AnchorPane>

Event Handler im Code anlegen

Alternativ kann man den Event Handler natürlich auch im Code definieren

     tvTabelle.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
       Eintrag neuEintrag=(Eintrag) newValue;
       System.out.println("tableView Selection Changed (selected: " + neuEintrag.BeschreibungProperty() +")");
     });

Beispiel getestet mit Version

ab Java 8

Autor

Frank

Siehe auch

usercontent/table-auswahl_beispiel.txt · Zuletzt geändert: 27/10/2014 18:51 von 84.185.45.24