JavaFX ControlsFX - Wie kommt man an den Zellinhalt?

White_Fox

Top Contributor
Moin allerseits

Mal eine Frage zur SpreadsheetView aus der controlsFX-Bibliothek: Gibt es eine Möglichkeit, an den Inhalt einer Zelle ranzukommen? Im konkreten Fall lege ich in einer Spreadsheetzelle keinen String, sondern ein anderes Controlobjekt ab, und dieses Controlobjekt hätte ich gerne wieder um es auszulesen.

Hat da jemand eine Idee?
 

KonradN

Super-Moderator
Mitarbeiter
Hier wäre aus meiner Sicht interessant, wie Du es derzeit in Deinem Code aufgebaut hast. Hintergrund ist hier halt aus meiner Sicht, dass ich immer gerne auf Model und ModelView Ebene agiere und dann interessieren mich die Controls am Ende nicht mehr wirklich. Das gibt dann letzten Endes die Möglichkeit, auf View Ebene jederzeit Änderungen vornehmen zu können und ich kann die Logik selbst sehr gut automatisch testen.

Aber Du solltest bei einer SpreadSheetView auf die zugrunde legende Grind zugreifen können (getGrid()) um da dann über getRows auf die jeweilige SpreadsheetCell zuzugreifen. Das gibt Dir aber halt nicht das Control sondern das zugrunde legende Model (die ObjectProperty). Zugriff auf das Control selbst ist wohl auch nicht ganz so einfach, weil dies wohl von Dingen abhängig ist wie Sichtbarkeit und ich meine. Die Kontrolle kannst Du aber ggf. gewinnen, wenn Du über eigene Cell Factories die Controls bereit stellst. Das habe ich so aber in der Form bisher nicht wirklich gemacht bezüglich eigener Verwaltung der Controls so dass ich nicht weiss, in wie weit man da ggf. Probleme bekommt mit Lifecycle und so. (JavaFX war halt auch noch nicht wirklich ein Schwerpunkt bei mir. Außer eben diverser privater Dinge und dann vielen Proof of Concept Dingen habe ich da keine wirklich tiefe Erfahrung)
 

White_Fox

Top Contributor
Moin Konrad

Momentan baue ich die Zellen so auf (das Control, das ich haben will, ist wieder ein Spreadsheet):
Java:
    //...
    cell = new SpreadsheetCellBase(rowcnt, 0, 1, 1);
    Node temporaryPropertiesTable = temporaryPropertyTable(temporaryProperties);
    // cell.setItem(null);
    cell.setGraphic(temporaryPropertiesTable);
    //...


private Node temporaryPropertyTable(List<StampsetTemporaryPropertyModel> temporaryProperties) {
    //...   
    var grid = new GridBase(2, temporaryProperties.size());
    grid.setRows(rows);
    SpreadsheetView spreadsheetView = new SpreadsheetView(grid);
    spreadsheetView.setShowRowHeader(false);
    spreadsheetView.setShowColumnHeader(false);
    spreadsheetView.setContextMenu(this.getContextMenu());
    return spreadsheetView;
}

Aber bevor ich mich mit einer eigenen CellFactory herumschlage, überlege ich, ob ich nicht einfach lieber die Spreadsheets in eine separate Liste schmeiße und darüber dann auslese, was ich haben will, den Index dieser Liste würde ich über das SelectionModel meines "äußeren" Spreadsheets kriegen. Ich will z.B. wissen, welche Zelle der Benutzer dort ausgewählt hat, dazu muß ich an das Spreadsheet ran. Ich habe das gesamte Projekt zwar auch als MVC aufgesetzt, aber die ganze View ist dermaßen groß geworden, daß ich irgendwann angefangen habe die View in verschiedene Teilklassen aufzuteilen, und die müssen irgendwie miteinander reden können.

Wenn ich so darüber nachdenke, finde ich die Idee mit der separaten Liste gar nicht so schlecht. Vom Grundkonzept her zwar ein absoluter Drecksplan, weil die Liste eigentlich völlig überflüssig ist - die Liste gäbe es ja irgenwo im Speicher schon, nämlich in den Eingeweiden des Spreadsheets. Aber es ist halt JavaFX, was willste machen...
 

KonradN

Super-Moderator
Mitarbeiter
Ja, ich denke, das wäre eine Idee, die Sinn machen könnte. Ich sehe da nicht wirklich einen besseren, direkten Weg.

Wenn man alles umbauen würde Richtung MVVM, dann liesse sich evtl. eins Art Komponentenbasierter Aufbau erreichen. Das bläht aber erst einmal alles massiv auf ehe man dann generalisierte Basisklassen erstellt bekommt. Und im Augenblick bin ich mir da auch noch nicht ganz sicher, wie das im Detail aussehen könnte. Man kann da bestimmt einiges an Unterstützung bauen bezüglich automatisierte Erstellung von ViewModels. Falls etwas in der Art interessant sein könnte, dann könnte man da gerne eine Art Brainstorming Session machen um erst einmal die Punkte zu identifizieren, die berücksichtigt werden müssten um dann evtl. ein Konzept zu erstellen, das umgesetzt werden kann. (Die ersten Ansätze gingen mir durch den Kopf, als es neulich um einen "Controller mit Construktor, der Argumente benötigt" ging was ich dann etwas auch Richtung MVVM Unterstützung und component basiertem Vorgehen erweitert hatte... Aber ich hatte da den Denkfehler, dass es mir nur um das Model ging, aber es gibt definitiv auch Bedarf, Events und Eigenschaften von Controls weiter zu geben...) Ziel sind halt wirklich nur eine Hand voll Klassen, die das Vorgehen dann unterstützen könnten und den Code dann vereinfachen würden für eine bessere Übersicht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Baerdoc Fehlermeldung bei Validierung mit controlsfx AWT, Swing, JavaFX & SWT 5
T JavaFX ControlsFX-Notification öffnet nicht wenn kein JavaFX-Fenster offen. AWT, Swing, JavaFX & SWT 1
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
P Anwendung kommt nach minimieren nicht mehr in den Vordergrund AWT, Swing, JavaFX & SWT 5
B JFrame kommt nicht in den Vordergrund AWT, Swing, JavaFX & SWT 7
M SWT Scrollbalken kommt zu spät AWT, Swing, JavaFX & SWT 5
S validate(), invalidate(), repaint(),... Was kommt wann? AWT, Swing, JavaFX & SWT 5
K Simuliere Tastendruck, kommt nicht in allen Programmen an AWT, Swing, JavaFX & SWT 5
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
hdi SWT Operation auf GUI-Komponente kommt mal wieder nicht an... AWT, Swing, JavaFX & SWT 9
F Woher kommt der Rand? AWT, Swing, JavaFX & SWT 4
T Feststellen woher KlickEvent kommt AWT, Swing, JavaFX & SWT 3
A Applet kommt offline nicht mit FileReader zurecht AWT, Swing, JavaFX & SWT 3
H eigene paintComponent(Graphics) kommt mit rezise nicht klar AWT, Swing, JavaFX & SWT 6
M JLabel kommt zu spät AWT, Swing, JavaFX & SWT 3
P wie kommt getPreferredSize() zustande? AWT, Swing, JavaFX & SWT 6
S JTable Zellinhalt markierbar aber nicht editierbar AWT, Swing, JavaFX & SWT 4
D JTable - Wie markiert man den Zellinhalt beim Editeren ? AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben