Sorry, ich bin nach wie vor blutiger Anfänger - aber das Thema ist leider JavaFX spezifisch, daher in dieser Rubrik.
Ich habe eine TreeTableView mit 2 Spalten.
Als Elemente der TreeTableView verwende ich Instanzen von MyTreeItem, was aus TreeItem abgeleitet wurde und bislang lediglich um die Eigenschaft "Beschreibung" (ein ganz normaler String) ergänzt wurde. (Ich will hier später noch deutlich mehr mit reinpacken, fange aber zunächst mit diesem simplen String an)
In der ersten Spalte soll ganz normal die Baumstruktur angezeigt werden - das klappt reibungslos.
In der zweiten Spalte möchte ich, dass der Text aus der "beschreibung" aus dem entsprechenden MyTreeItem angezeigt wird.
Die Anzeige der Daten in den Spalten erfolgt offenbar über eine CellValueFactory.
Hier steige ich komplett aus - das kapiere ich irgendwie null!
Hier fehlt mir das sogenannte Aha-Erlebnis!
Ich lese das immer wieder an verschiedensten Stellen durch und scheitere an Sachen wie "CallBack", Lambda oder Typen 'S' und 'T' (was auch immer damit gemeint ist, mal String , mal Typ, mal observable, egal wie, alles für mich kryptisch) und vielem, vielem anderen.
Für die erste Spalte habe ich einen Beispielcode aus dem Internet genommen, das klappt dann auch wunderbar.
Für die Spalte 2 bringe ich jedoch nichts eigenes zustande, außer einem statischen Universaltext (wie in meinem Beispielcode).
Kann mir jemand erklären, wie ich hier meine Strings "beschreibung" der MyTreeItem-Instanzen in die Spalte 2 hineinbekomme?
Einen Screenshot habe ich angehängt (direkt einbinden kann ich den leider nicht).
Und hier mein Code:
Unächst meine Klasse MyTreeItem, welche von TreeItem abgeleitet ist:
die ControllerKlasse:
und noch die FXML:
und die Hauptklasse:
Vielen Dank schon mal für die sagenhafte Hilfe hier!
Ich habe eine TreeTableView mit 2 Spalten.
Als Elemente der TreeTableView verwende ich Instanzen von MyTreeItem, was aus TreeItem abgeleitet wurde und bislang lediglich um die Eigenschaft "Beschreibung" (ein ganz normaler String) ergänzt wurde. (Ich will hier später noch deutlich mehr mit reinpacken, fange aber zunächst mit diesem simplen String an)
In der ersten Spalte soll ganz normal die Baumstruktur angezeigt werden - das klappt reibungslos.
In der zweiten Spalte möchte ich, dass der Text aus der "beschreibung" aus dem entsprechenden MyTreeItem angezeigt wird.
Die Anzeige der Daten in den Spalten erfolgt offenbar über eine CellValueFactory.
Hier steige ich komplett aus - das kapiere ich irgendwie null!
Hier fehlt mir das sogenannte Aha-Erlebnis!
Ich lese das immer wieder an verschiedensten Stellen durch und scheitere an Sachen wie "CallBack", Lambda oder Typen 'S' und 'T' (was auch immer damit gemeint ist, mal String , mal Typ, mal observable, egal wie, alles für mich kryptisch) und vielem, vielem anderen.
Für die erste Spalte habe ich einen Beispielcode aus dem Internet genommen, das klappt dann auch wunderbar.
Für die Spalte 2 bringe ich jedoch nichts eigenes zustande, außer einem statischen Universaltext (wie in meinem Beispielcode).
Kann mir jemand erklären, wie ich hier meine Strings "beschreibung" der MyTreeItem-Instanzen in die Spalte 2 hineinbekomme?
Einen Screenshot habe ich angehängt (direkt einbinden kann ich den leider nicht).
Und hier mein Code:
Unächst meine Klasse MyTreeItem, welche von TreeItem abgeleitet ist:
Java:
package treetest;
import javafx.scene.control.TreeItem;
public class MyTreeItem extends TreeItem {
private String name="not inizialized"; // entspricht dem String von getValue()
private String beschreibung="not initialized"; // soll in Spalte 2 des Treeview angezeigt werden
public MyTreeItem() {
this.setValue(name);
}
public void setName(String name) {
this.name=name;
this.setValue(name);
}
public String getName() {
return this.name;
}
public void setBeschreibung(String beschreibung) {
this.beschreibung=beschreibung;
}
public String getBeschreibung() {
return this.beschreibung;
}
}
die ControllerKlasse:
Java:
package treetest;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
public class FXMLDocumentController implements Initializable {
@FXML
private TreeTableView<String> ttv;
public MyTreeItem[] ti = new MyTreeItem[100];
@Override
public void initialize(URL url, ResourceBundle rb) {
// Tree-Elemente anlegen
MyTreeItem root = new MyTreeItem();
root.setName("Ebene01");
ti[1] = new MyTreeItem();
ti[1].setName("Ebene2-Element1");
ti[1].setBeschreibung("Beschreibung1");
ti[2] = new MyTreeItem();
ti[2].setName("Ebene2-Element2");
ti[2].setBeschreibung("Beschreibung2");
ti[3] = new MyTreeItem();
ti[3].setName("Ebene3-Element3");
ti[3].setBeschreibung("Beschreibung3");
ti[4] = new MyTreeItem();
ti[4].setName("Ebene3-Element4");
ti[4].setBeschreibung("Beschreibung4");
ti[2].getChildren().addAll(ti[3], ti[4]); // Elemente in Ebene 3 unter "Element2"
root.getChildren().addAll(ti[1], ti[2]); // Elemente unter dem Hauptknoten
// Anlegen der Tree Table Spalten
TreeTableColumn<String, String> column1 = new TreeTableColumn<>("Ebenen");
column1.setPrefWidth(150);
TreeTableColumn<String, String> column2 = new TreeTableColumn<>("Beschreibung");
column2.setPrefWidth(300);
column1.setCellValueFactory((TreeTableColumn.CellDataFeatures<String, String> param) -> {
return new ReadOnlyStringWrapper(param.getValue().getValue());});
column2.setCellValueFactory((TreeTableColumn.CellDataFeatures<String, String> param) -> {
return new ReadOnlyStringWrapper("wie bekomme ich hier die 'Beschreibung' rein?");});
ttv.setRoot(root);
ttv.getColumns().addAll(column1, column2);
root.setExpanded(true); // root ist "ausgeklappt"
ti[2].setExpanded(true); // element ist "ausgeklappt"
ttv.getSelectionModel().select(0); // selektiert die erste Zeile
}
}
und noch die FXML:
Java:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TreeTableView?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane id="AnchorPane" prefHeight="419.0" prefWidth="466.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.141" fx:controller="treetest.FXMLDocumentController">
<children>
<Label fx:id="label" layoutX="126" layoutY="120" minHeight="16" minWidth="69" />
<TreeTableView fx:id="ttv" layoutX="33.0" layoutY="29.0" prefHeight="365.0" prefWidth="419.0" />
</children>
</AnchorPane>
und die Hauptklasse:
Java:
package treetest;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class TreeTest extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
Vielen Dank schon mal für die sagenhafte Hilfe hier!