FXML Tabellen
Befüllen (Fixe Spalten)
@FXML
TableView<Sportart> tblSportarten;
TableColumn col1 = (TableColumn) tblSportarten.getColumns().get(0);
col1.setCellValueFactory(new PropertyValueFactory<>("sport_Id"));
TableColumn col2 = (TableColumn) tblSportarten.getColumns().get(1);
col2.setCellValueFactory(new PropertyValueFactory<>("sportart"));
TableColumn col3 = (TableColumn) tblSportarten.getColumns().get(2);
col3.setCellValueFactory(new PropertyValueFactory<>("beitrag"));
tblSportarten.getItems().clear();
try{
ArrayList<Sportart> sportarten = SportartDAO.getAll();
for (Sportart o:sportarten){
tblSportarten.getItems().add(o);
}
}catch(SQLException e){
App.showAlert("Error", "LoadSportart", e.getMessage());
}Befüllen (dynamische Spalten)
try {
tblResults.getItems().clear();
tblResults.getColumns().clear();
//Abfrage starten
ResultSet rs = Dao.executeQuery(txtSQL.getText());
//Metadaten auswerten
int colCount = rs.getMetaData().getColumnCount();
//Create Result-Columns
for (int i = 1; i <= colCount; i++) {
TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i));
col.setCellValueFactory(new MapValueFactory<>("col" + i));
tblResults.getColumns().add(col);
}
//Loop Data and fill Data-Items
ObservableList<Map<String, Object>> items = FXCollections.<Map<String, Object>>observableArrayList();
while (rs.next()) {
Map<String, Object> item = new HashMap<>();
String value = "";
for (int i = 1; i <= colCount; i++) {
value = "";
switch (rs.getMetaData().getColumnType(i)) {
case Types.BOOLEAN:
value = String.valueOf(rs.getBoolean(i));
break;
case Types.DATE:
value = String.valueOf(rs.getDate(i));
break;
case Types.REAL:
case Types.DECIMAL:
case Types.NUMERIC:
case Types.DOUBLE:
value = String.valueOf(rs.getDouble(i));
break;
case Types.FLOAT:
value = String.valueOf(rs.getFloat(i));
break;
case Types.TINYINT:
case Types.SMALLINT:
case Types.INTEGER:
value = String.valueOf(rs.getInt(i));
break;
case Types.TIMESTAMP:
value = String.valueOf(rs.getTimestamp(i));
break;
case Types.LONGVARCHAR:
case Types.VARCHAR:
value = rs.getString(i);
break;
}
item.put("col" + i, value);
}
items.add(item);
}
tblResults.getItems().addAll(items);
} catch (Exception e) {
System.out.println(e.getLocalizedMessage());
}FXML neue Seite anzeigen
try{
// FXML-Loader erzeugen und Layout auswählen
FXMLLoader loader = new FXMLLoader();
loader.setLocation(App.class.getResource("main.fxml"));
// Root der neuen Scene speichern
Parent root = loader.load();
//aktuellen Controller von main.xml holen und stage übergeben
MainController controller = loader.getController();
controller.setStage(stage);
//Neue Szene erzeugen und Root-Element übergeben
Scene scene = new Scene(root);
//Die Szene der Stage austauschen und
stage.setScene(scene);
stage.show();
}catch (IOException e){
System.out.println(e.getLocalizedMessage());
}FXML Aufklappmenü
Im SceneBuilder erstellen:
MenuBar(
Menu(
MenuItem("Item1"),
MenuItem("Item2")
)
)
FXML Selected Item von Tabelle
Eintragen bei onMouseClicked beim TableView
@FXML
public void selectItem() {
Sportart selected = (Sportart) tblSportarten.getSelectionModel().getSelectedItem();
txtSportId.setText(Integer.toString(selected.getSport_Id()));
txtSportart.setText(selected.getSportart());
txtBeitrag.setText(Float.toString(selected.getBeitrag()));
}