JavaFX TreeTableView & Column Span

Nisha1323

Mitglied
Hallo,

kennt jemand ein gutes Tutorial zu folgendem Problem (oder kann mir allgemein jemand helfen):

Ich habe eine TreeTableView in JavaFX 8 und wollte dort gerne manchmal alle Zellen nebeneinander (also Zellen verschiedener Spalten) zu einer Spalte zusammenfügen. Ist das möglich?
 

dzim

Top Contributor
Verstehe ich das richtig? Du willst einen Tree, aber mit Spalten. In bestimmten Fällen jedoch sollen die Cellen einer Zeile auch zusammengefasst sein können?
Wie die Namen es schon suggerieren, gibt es in der Standart-Lib von JavaFX nur TreeView, TableView und TreeTableView, die genau das machen, was ihr Name aussagt. Keine Fancy-Shiny-Bling-Bling ausser dem, was schon da ist.

----------------------------------------------------------------------

Dafür musst du in den ThirdParty-Bereich schauen. Meine Favoriten sind:

CotrolsFX von FXexperience - Sowohl der Blog als auch ControlsFX werden von einem Oracle-Mitarbeiter gepflegt (aktiv!), der glaube ich am TableView gearbeitet hat. Dort gibt es einen SpreadsheetView. Von dem einen Satz her könnte es das von dir gesuchte sein:
ControlsFX Features // JavaFX News, Demos and Insight // FX Experience

Auch interessant:
JFXtras

Aktive Bastler und Hacker im JavaFX-Bereich:
Tomsondev Blog | Tom's opensource development
GuiGarage - open source ui stuff (finde hier das DataFX-Projekt sehr interessant)
Harmonic Code

Falls wem noch mehr einfällt... Her damit.
 

Nisha1323

Mitglied
Ich habe eine TreeTableView mit 2 Ebenen. Also die erste Ebene nach dem RootItem und die Kinder der ersten Ebene. Und ich möchte gerne in der 2. Ebene die Zellen der Spalten zusammenfassen (um dort später nach Möglichkeit eine weitere Tabelle einzufügen). Ein bisschen wie in diesen großen Access-Tabellen, wenn ihr versteht was ich meine... Aber das mit der 2. Tabelle ist erstmal egal, wichtig wäre erstmal wie ich die Zellen zusammenfassen kann......
 

dzim

Top Contributor
dzim hat gesagt.:
CotrolsFX von FXexperience - Sowohl der Blog als auch ControlsFX werden von einem Oracle-Mitarbeiter gepflegt (aktiv!), der glaube ich am TableView gearbeitet hat. Dort gibt es einen SpreadsheetView. Von dem einen Satz her könnte es das von dir gesuchte sein:
ControlsFX Features // JavaFX News, Demos and Insight // FX Experience
Ich hasse es eigentlich, mich selbst zu zitieren, aber hast du überhaupt gelesen, was ich geschrieben habe?
Access ist mir unbekannt - ich arbeite nur mit ordentlichen Datenbanken, daher hab ich keinen Schimmer, was du da meinst. aber ich kann mir Excel-Tabellen vorstellen, bei denen Spalten oder Zeilen zusammenfasst sind.

Darüber hinaus: Frage mal Google nach "javafx tableview column span", da kommt was vom oben zitierten Blog:
Cell spanning in TableView // JavaFX News, Demos and Insight // FX Experience
Da gibt es etwas zum herunterladen für JavaFX 8.
Andere Links, wie etwa java - TableView Cell Span - Stack Overflow sagen, es kommt erst irgendwann später offiziell in die API, Allerdings liefert java - JavaFX Span Tableview Merge Cells by MapEntries - Stack Overflow eine Beschreibung, wie man es dennoch machen könnte.
Da es hier eh nur um Tabellen geht, wohl nicht so interessant für dich.

Sucht man nach "javafx treetableview column span" findet man unter anderem
https://wikis.oracle.com/display/OpenJDK/TreeTableView+User+Experience+Documentation
De Bildern nach zu urteilen, ist es möglich Cell Spannin in TreeTableView zu implementieren. Ich denke, es läuft auf eine Custom-Cell hinaus.
Schaut man nur kurz in die JavaDoc der API https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TreeTableView.html und such nach "span", findet man als erstes folgendes Satz:
Oracle hat gesagt.:
Customizing TreeTableView Visuals

The visuals of the TreeTableView can be entirely customized by replacing the default row factory. A row factory is used to generate TreeTableRow instances, which are used to represent an entire row in the TreeTableView.

In many cases, this is not what is desired however, as it is more commonly the case that cells be customized on a per-column basis, not a per-row basis. It is therefore important to note that a TreeTableRow is not a TreeTableCell. A TreeTableRow is simply a container for zero or more TreeTableCell, and in most circumstances it is more likely that you'll want to create custom TreeTableCells, rather than TreeTableRows. The primary use case for creating custom TreeTableRow instances would most probably be to introduce some form of column spanning support.

You can create custom TreeTableCell instances per column by assigning the appropriate function to the TreeTableColumns cell factory property.

See the Cell class documentation for a more complete description of how to write custom Cells.
Scheint also so, als ob du eine RowFactory brauchst.

Mal so am Rand erwähnt. Das alles hab ich in 5 Minuten ergooglet. Ist es echt so schwer, ein paar Suchbegriffe bei Google (oder Bink oder whatever) zusammenzureihen und abzusetzen?
 

Nisha1323

Mitglied
Wenn du es so hasst und es auch noch so unnötig ist, wieso wiederholst du es denn dann? Ich habe sehr wohl gelesen was du geschrieben hattest, es hat mir nur nicht weitergeholfen. Tatsächlich bin ich auch in der Lage zu googeln und habe *Überraschung* genau die Seiten gefunden, die auch du anscheinend gefunden hast, die beantworten nur leider meine Frage überhaupt nicht.

Das es wohl theoretisch möglich ist weiß ich, nur leider finde ich nirgendwo das was ich brauche, bzw. was mir weiterhilft. Mal eben die default RowFactory ersetzen kann ja vlt sogar einfach sein, ich habe aber leider nicht wirklich Erfahrung dabei und bevor ich mich Tage lang "tot"-suche und nicht weiter komme, frage ich auch einfach mal nach Hilfe.

Es ist ja schön, wenn du mit "ordentlichen" Datenbanken arbeitest, aber sehr viele Menschen arbeiten nunmal mit Access (und haben vlt auch keine Möglichkeit mit etwas anderem zu arbeiten), darum mein Beispiel.

Ich hatte gehofft hier jemanden zu finden der damit schon Erfahrungen gemacht hat und der mir auf vernünftige Art und Weise versucht zu helfen und nicht jemanden, der hier super unfreundlich und aggressiv rumpöbelt und meint mir googeln erklären zu müssen.
 

dzim

Top Contributor
Mal vom *heul-heul-heul* abgesehen: Wenn du die Links schon gefunden und gelesen hättest, hättest du mir gleich den Tipp mit der RowFactory geben können, statt deine Initiale Frage fast noch einmal mit selben Inhalt zu stellen.

Also mache ich das naheliegensde und google nach "treetableview RowFactory".
Hier findet man ein Beispiel einer solchen Factory: JavaFX TreeTableView Remove Item ContextMenu - Stack Overflow (das Problem des Enwicklers dort kann man aber ignorieren, es geht nur um das Beispiel)

https://www.youtube.com/watch?v=udc2iRZBF0M
Ab 31:00 wird es generell interessant für dich.
Ab 47:00 gehts dann los.
Soweit ich es gesehen hab bezieht es sich aber auf den ersten Link von CellSpanning von der FXExperience-seite (Das Video ist auch von dem Typen)

Ein paar mehr Infos (allgmeiner Natur): https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/tree-table-view.htm

Gundsätzlich aber gilt: Du musst eine RowFactory machen. Das scheint generell kein so oft vorzukommender Fall zu sein, das es jemand braucht. Da ich TreeTableView selbst noch nie verwendet habe, kein Beispiel für einen solchen jetzt hacken möchte, kann und werde ich dir nur Links zu Hilfe geben können. Mehr nicht.
Den Rest musst du schon selbst machen.

Und sorry, aber wenn man eine eine eingene Zelle schon bauen kann, ist der Schritt zu der Zeile nicht mehr so abwegig. Da musst du dich also wohl oder übel in die API (siehe noch einmal hier: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TreeTableView.html ) klemmen und es ausprobieren.

Alles was ich bisher in JavaFX (oder auch Swing, SWT, anderen Programmiersprachen, Eclipse RCP, OSGi (Pain in the A**)) gemacht habe besteht aus Learning by Doing und jeder Menge Fragen stellen und die Tipps versuchen nachzuvollziehen. Denn gerade bei den seltener verwendeten Sachen (OSGi zähle ich mal dazu), gibt es ein paar Pros aber kaum Tutorials.

Eine fertige Lösung, wird dir hier im Forum eh niemand liefern, nur Tipps und der Versuch, auf Fragen zu antworten. Und wenn du auf dem Weg mit ein paar ätzenden Bemerkungen nicht klar kommst... Ist das dein Problem. Du hast die Wahl, ignoriere sie und versuch dennoch das für dich sinnvollste rauszuholen, oder reg dich darüber auf, statt dich mit deinem Problem zu befassen. Mir ist die Zeit egal, die ich hier verplemper und wenn ich vor deinem Problem stehen würde, würde ich genau dass machen, was ich oben geschrieben hab: Viel Google und viel Testen. Und IMHO unpassende Antworten ignorieren.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JavaFX TreeTableView in Java7 portieren? AWT, Swing, JavaFX & SWT 5
K TreeTableView (cellFactory) - wie Daten in Spalten einfügen AWT, Swing, JavaFX & SWT 0
C JavaFX TreeTableView aktualisieren AWT, Swing, JavaFX & SWT 10
G JavaFX TreeTableView und ProgressIndicator AWT, Swing, JavaFX & SWT 1
S JavaFX Mehrere TreeTableView's synchron scrollen AWT, Swing, JavaFX & SWT 0
L JavaFX TableView Column Sortierung AWT, Swing, JavaFX & SWT 1
robinab JavaFX TableView column resize nach setItems() AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
blazingblade JavaFX Tableview Clock Column update AWT, Swing, JavaFX & SWT 5
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
L Swing JTable refresht die Column Namen nicht AWT, Swing, JavaFX & SWT 0
J JTabbedPane: table in new tab: tooltip benutzt die column-widths von table in erstem geöffneten tab AWT, Swing, JavaFX & SWT 17
S Java FX TableView disable Column AWT, Swing, JavaFX & SWT 4
E JavaFX ScrollBar in TableView bei Column Resize AWT, Swing, JavaFX & SWT 2
S Swing JTable Column Width adjustment AWT, Swing, JavaFX & SWT 3
V jtable column AWT, Swing, JavaFX & SWT 5
1 Swing manual resize table column to min size AWT, Swing, JavaFX & SWT 2
hdi Swing JTable: SortKeys und Header Column Width AWT, Swing, JavaFX & SWT 5
A SWT Group und Column mit Resize ändern AWT, Swing, JavaFX & SWT 5
D Swing JTable move Column dnd Idx1 --> Idx2 AWT, Swing, JavaFX & SWT 2
R JTable mit Column die Icon und Integer enthält? AWT, Swing, JavaFX & SWT 3
R Zu selektiertem Column in JTable scrollen? AWT, Swing, JavaFX & SWT 2
S JTable Float Column fuegt automatisch Punkt hinzu wenn man Zahlen eingibt. AWT, Swing, JavaFX & SWT 21
G 'Spezieller' Tooltip, wenn JTable-Column zu schmal AWT, Swing, JavaFX & SWT 6
R JTable: Column Titel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
Z Column Breite in JTable automatisch an Inhalt anpassen AWT, Swing, JavaFX & SWT 3
S Frage zu Table(Column)Model AWT, Swing, JavaFX & SWT 3
G Keine Column-Names in JTable und Probleme mit getValueAt AWT, Swing, JavaFX & SWT 9
G ColumnHeader und Column-Indizes AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben