Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen

White_Fox

Top Contributor
Moin Leute

Ich habe eine Tabellenansicht in JavaFX/controlsFX, und möchte darin eine kleine Sub-Tabelle anzeigen. Diese Sub-Tabelle gibt es nicht immer, nur manchmal.

Mein Plan war, einfach eine neue SpreadsheetView in die Zelle zu legen, allerdings zerhaut es mir damit zuverlässig die äußere Tabelle. Die Subtabelle in einen Container legen und den Container in die Zelle stopfen, führt leider ebenfalls zu eine kaputten Tabelle.

Hat jemand eine Idee, wie ich das beigebogen bekomme?

Das ist der Code, der mir den Tag verdirbt (vor allem Zeile 8-12):
Java:
    private SpreadsheetCell temporaryPropertyDescription(List<StampsetRowheaderModel.StampsetTemporaryPropertyModel> temporaryProperties, int rowcnt) {
        SpreadsheetCell cell;
        if (temporaryProperties.isEmpty()) {
            cell = SpreadsheetCellType.STRING.createCell(rowcnt, 0, 1, 1, mainView.rextResources().getString("3081"));
        }
        else {
//            cell = SpreadsheetCellType.STRING.createCell(rowcnt, 0, 1, 1, "Any Temporary Stuff");
            cell = new SpreadsheetCellBase(rowcnt, 0, 1, 1);
            Node temporaryPropertiesTable = temporaryPropertyTable(temporaryProperties);
            cell.setItem(null);
            cell.setGraphic(temporaryPropertiesTable);
        }
        return cell;
    }
    
    private Node temporaryPropertyTable(List<StampsetRowheaderModel.StampsetTemporaryPropertyModel> temporaryProperties) {
        int row, col;
        ObservableList<ObservableList<SpreadsheetCell>> rows;
        SpreadsheetView spreadsheetView = new SpreadsheetView();

        //Grid
        Grid grid = new GridBase(2, 3);

        //Fill lines
        rows = FXCollections.observableArrayList();
        for (row = 0; row < 2; row++) {
            ObservableList<SpreadsheetCell> rowline = FXCollections.observableArrayList();
            for (col = 0; col < 3; col++) {
                SpreadsheetCell cell;
                cell = SpreadsheetCellType.STRING.createCell(row, col, 1, 1, "blah");
                rowline.add(cell);
            }
            rows.add(rowline);
        }

        grid.setRows(rows);
        spreadsheetView.setGrid(grid);
        spreadsheetView.setShowColumnHeader(false);
        spreadsheetView.setShowRowHeader(false);
        
        ScrollPane pane = new ScrollPane(spreadsheetView);
        pane.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);
        pane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
        
        return pane;
    }

In ausführbar und das ganze Drumherum gibt es hier. Wer sich anschauen will wie es eigentlich aussehen soll, kann die Kommentare in den Zeilen 8-12 mal umkehren, in der Originaldatei sind es die Zeilen 272-276, die Datei selbst ist unter ...\jComponent Library Sorcerer\jComponent Library Sorcerer\src\main\java\main\view\CenterviewStamptable.java zu finden.

Hat jemand eine Idee?
 

White_Fox

Top Contributor
So, nachdem ich etwas herumexperimentiert habe muß ich feststellen, daß es absolut kein Problem ist irgendwelche Nodes wie Buttons oder dergleichen in eine Spreadsheetview-Zelle zu packen.

Erst wenn irgendwas mit einem Grid, z.B. auch eine GridView, in der Zelle landet gibt sich die Spreadsheetview beleidigt und wirft die Zellen durcheinander bzw. vergisst auch welche. Auch, wenn man das Grid in einen Container packt.

Aber eine HBox mit lauter VBoxen geht...wahrscheinlich werde ich damit etwas umständlich zurechtbasteln. Ach man, wie das nervt...
 

White_Fox

Top Contributor
mihe7 hat gesagt.:
Ehrlich, ich bin hart versucht den ganzen FX-Krempel wieder rauszuwerfen und stattdessen das hier zu versuchen:

Ich hatte ja erst die Befürchtung, daß git meine Selbstdisziplin herausfordert, nur das zu implementieren was Spaß macht, und mir der wichtige, aber nervige Kram umso schwerer fällt. Aber einen Parallelbranch mit Imgui werde ich auf jeden Fall mal aufmachen.
 

KonradN

Super-Moderator
Mitarbeiter
Also da es etwas das Topic verlassen hat: Ich selbst würde GUI Entwicklung mit Java ganz sein lassen. Java hat da einfach viel zu viele Lücken!

Das fängt schon mit fxml an, dass da gewisse Dinge einfach nicht mit möglich sind und führt dann zu Dingen wie: bau mal etwas, dass Du weiter geben kannst.

Gerade letzteres ist ja etwas, mit dem ich mich etwas beschäftigt habe und wo ich einfach nur entsetzt bin, wie man sowas als Lösung präsentieren kann. Dieses ganze Module / JLink / JPackage Geraffel ist schon ein Witz. (Kein Wunder, dass die Enterprise Welt das bisher komplett ignoriert hat und erst das neueste Jakarta EE und Spring Framework und so da Module unterstützen.

Da macht dann eine Lösung wie .Net MAUI und Blazer doch einen ganz anderen Eindruck. Ich habe Microsoft ja auch ganz schön beschimpft wegen paar Dingen, aber hier schlägt es Java deutlich (nicht, dass sowas schwer oder eine Leistung wäre).

Das nur als kleine Anmerkung von meiner Seite :)
 

White_Fox

Top Contributor
Naja, ich baue meine GUI ja nicht mit XML, sondern zu Fuß. Und zumindest das mit dem Weitergeben haben die inzwischen im Griff, wenn auch nur über ein oskures Gradleplugin. Auch wenn die Fixes nicht dort sind, wo Mist gebaut wurde, und die letzte Version des Java-Plugins ist gerade ein paar Wochen alt, das wurde erst ein paar Stunden im Githubrepo veröffentlicht, als ich im Gradleforum danach gefragt habe. Gleich der erste Kommentar dazu: "Is that something which should fixed by JavaFX?" (oder so ähnlich...).

Ich will das Projekt schon gerne in Java belassen, die Sprache ist schon ziemlich geil (wenn auch nicht perfekt) und C# müßte ich erst lernen, aber ImGUI lacht mich immer mehr an. ImGUI ist andererseits aber auch nicht Java, sondern C++. Hier ist mal ein Video, wie man das mit Java und JNI aufzieht, der Kram mit JNI und Gradle sieht mir erstmal gut gelöst aus:

Vor allem: In jeder Demo sieht ImGUI weitaus hübscher aus als JavaFX im Standardstil.


Aber zu meiner Problem"lösung": Es geht mit HBox und VBoxen tatsächlich, allerdings ist dann nur noch die Zelle als ganzes anklickbar. Das heißt, ich brauche wieder ein neues Editorfenster, um den Kram darin bearbeiten zu können, aber ok.
Weitaus besser: Das Tabellenlayout sieht in etwa so aus bzw. sollte so aussehen:
Code:
----------------------------------------------------------------------------
Hier soll eine Tabelle mit zwei | E i n e  l a n g e  Z e l l e
Zeilen und x Spalten sein       | Spalte | Spalte | Spalte | Spalte | Spalte
----------------------------------------------------------------------------
Hier soll eine Tabelle mit zwei | E i n e  l a n g e  Z e l l e
Zeilen und x Spalten sein       | Spalte | Spalte | Spalte | Spalte | Spalte
----------------------------------------------------------------------------
Hier soll eine Tabelle mit zwei | E i n e  l a n g e  Z e l l e
Zeilen und x Spalten sein       | Spalte | Spalte | Spalte | Spalte | Spalte

Nun ist es so: Kommt auf die linke Seite die H-V-Box rein, verschwindet die Spaltenzeile komplett, die breite Zeile obendrüber nimmt den kompletten Platz ein. Wenn ich aber die Zeilenheader einblende, kann man die Tabellenzeilen mit der Maus selber anpassen. Zuppelt man gaaaaaaaanz wenig an dem Zeilenheader, stimmt die Größe gleich wieder.
Die Spreadsheetview bietet leider keinerlei Methoden um eine einzelne Zeilenhöhe zu ändern, aber dafür Methoden wie resizeRowsToFitContent(), resizeRowsToMaximum() und resizeRowsToDefault().

Wenn ich die ersten zwei Methoden aufrufe, werden einfach alle Zeilen auf ein Minimum eingedampft. resizeRowsToMinimumsteadOfYourFuckingMaximum() Die letzte Methode tut einfach gar nix (wird wahrscheinlich sowieso als letztes per default aufgerufen). Das ist alles ein schlechter Witz.

Ach, ich glaube ich mache das jetzt so...zumindest diese eine Funktionalität mache ich in JavaFX jetzt fertig, immerhin habe ich sie angefangen, und dann gucke ich mal wie das mit ImGUI aussehen würde.

Das hat damals schon verdammt genervt, dauernd an einer vernünftigen MVC-Struktur zu scheitern, aber das Dranbleiben und Codewegwerfen damals hat sich anscheinend gelohnt.
 

White_Fox

Top Contributor
Ich weiß...ich nehms dir ja nicht krum. ;)

Über mich selber würde ich auch so lachen, wenn wenigstens das Ergebnis nur nicht so schmerzen würde. :D

PS: Bei Interesse kann ich ja mal meine Erfahrungen mit ImGUI zum Besten geben.
 

KonradN

Super-Moderator
Mitarbeiter
Bei Interesse kann ich ja mal meine Erfahrungen mit ImGUI zum Besten geben.
Das kann durchaus interessant sein. Wenn Du Dir die Zeit nehmen würdest, dann würde mich das freuen.

ImGUI ist andererseits aber auch nicht Java, sondern C++
Also unter dem Strich ist das bei allen Dingen so. Java selbst kann nun einmal per se keine UI. Das macht das Betriebssystem und dazu braucht man eine Schicht dazwischen.
Bei awt/swing haben das die Entwickler halt ins Framework mit hinein gebaut - aber da findet sich dann natürlich der entsprechende nicht Java Code.

Bei JavaFX / SWT / ... hast Du halt in den jar Dateien die entsprechenden sharded Libraries. Also einfach einmal in das javafx-graphics jar File hinein schauen, dann siehst Du entsprechende .dll / .so Dateien.

Das ist also prinzipiell ok. Falls die Libraries noch nicht entsprechend im jar File integriert wurden, dann wäre das etwas, das man noch massen müsste. Das habe ich vor kurzem erst in einem kleinen Proof of Concept auf AIX gemacht:
  • C++ Library die übersetzt wurde (shared library und statische Library falls man es statisch haben möchte)
  • Dazu dann Wrapper und Co
  • Alles verpackt in eine jar Datei. Die shared Library musste man vor dem ansprechen aber erst aus der jar Datei kopieren, also in ein temporäres Verzeichnis kopieren.

Aber ich gehe mal davon aus, dass das auch schon gemacht wurde.
 

White_Fox

Top Contributor
Das kann durchaus interessant sein. Wenn Du Dir die Zeit nehmen würdest, dann würde mich das freuen.
Ok...mache ich, dauert aber noch etwas. Eher Wochen als Tage, aber ich werde das wohl mal so aufziehen, daß mein kleines Programm beide GUIs parallel anzeigen kann. Wäre auch für mich interessant, mal beides direkt nebeneinander zu sehen.
 
Zuletzt bearbeitet:

White_Fox

Top Contributor
Ich muß meinen Rant über JavaFX und controlsfx etwas entschärfen. Ich habe – mehr oder weniger zufällig – dann doch noch herausgefunden, wie ich die Zeilen einer SpreadsheetView ändern kann.

Der Clou ist:
Um eine SpreadsheetView zu erzeugen, muß man ihr ein Grid-Objekt geben daß die Zellen enthält. Oft wird das wie folgt deklariert:
Java:
Grid grid = new GridBase(rowCount, columnCount);

//...grid mit Zeilen füllen...

SpreadsheetView spv = new SpreadsheetView(grid);

Deklariert man grid aber als ein GridBase anstelle eines Grid, steht eine neue Methode zur Verfügung: public void setRowHeightCallback(Callback<Integer,Double> rowHeight). Da kann man nun eine anonyme, innere Instanz drin verstecken die den Zeilenindex vorgeworfen bekommt und die Zeilenhöhe zurückliefert. Bei mir sieht das dann so aus:
Java:
centerviewStampgrid.setRowHeightCallback(new Callback<Integer, Double>(){
            @Override
            public Double call(Integer rowIndex) {
                return rowIndex % 2 == 0 ? 24.0 : 48.0;
            }
        });

24,0 ist die Standardhöhe einer Zeile, jede zweite Zeile soll doppelt so hoch sein, und schon sieht es vernünftig aus. Es sieht sogar vernünftig aus, wenn ich in die Zelle eine weitere SpreadsheetView reinewerfe, dan kann ich die Zellen in der "inneren" SpreadsheetView sogar auswählen.

Das macht jetzt zwar meine ganze Arbeit vom Wochenende überflüssig:rolleyes:, aber was solls.

Ich habe es zufällig in der JavaDoc gefunden, eigentlich habe ich etwas anderes gesucht. Schade, daß das so versteckt ist. Als ich gezielt danach gesucht habe, habe ich auch keinerlei Beispiele gefunden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C 3 kleine Probleme... AWT, Swing, JavaFX & SWT 13
I Swing Beim Fenster das kleine Symbol(ICS) ändern AWT, Swing, JavaFX & SWT 3
L JPanel kleine "Animation" AWT, Swing, JavaFX & SWT 7
P Pfeilpolygon per Maus rotierbar machen - Kleine Schwierigkeiten AWT, Swing, JavaFX & SWT 29
Z kleine JButtons und ihre Beschriftung AWT, Swing, JavaFX & SWT 5
H kleine Bildbearbeitung AWT, Swing, JavaFX & SWT 3
hdi SWT SWT Table: 2 kleine Probleme AWT, Swing, JavaFX & SWT 4
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
S Swing Kleine Bilder in Panel einfügen AWT, Swing, JavaFX & SWT 13
E AWT Kleine Hilfestellung bei Bildern in Mediatracker AWT, Swing, JavaFX & SWT 7
G Sehr kleine JButtons mit Icon oder Beschriftung AWT, Swing, JavaFX & SWT 2
M 2 Kleine Fragen zum JOptionFrame AWT, Swing, JavaFX & SWT 5
K kleine frage zum Spinner (bezüglich Action) AWT, Swing, JavaFX & SWT 2
G kleine Frage beim initialisieren AWT, Swing, JavaFX & SWT 2
R Kleine Panels auf einem großen Panel frei platzieren AWT, Swing, JavaFX & SWT 11
F kleine Zahlen/buchstaben mit Java darstellen? AWT, Swing, JavaFX & SWT 3
J Kleine frage zu PixelGrabber AWT, Swing, JavaFX & SWT 3
S kleine Frage zu drawPolygon AWT, Swing, JavaFX & SWT 5
N 3 kleine Probleme AWT, Swing, JavaFX & SWT 7
G kleine JDesktopPane problem AWT, Swing, JavaFX & SWT 2
K Tabelle zu Datenbank hinzufügen / Apache Derby AWT, Swing, JavaFX & SWT 7
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
T Anbinden der Tabelle an die Daten AWT, Swing, JavaFX & SWT 5
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
F JavaFX Tabelle mit Daten füllen AWT, Swing, JavaFX & SWT 9
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
F JavaFX Tabelle mit gespeicherten Eingabe Werten AWT, Swing, JavaFX & SWT 8
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
D Filter in Tabelle Sql AWT, Swing, JavaFX & SWT 6
M JavaFX Tabelle flexibler Länge AWT, Swing, JavaFX & SWT 3
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M Filter in die JFace/SWT Tabelle einbauen AWT, Swing, JavaFX & SWT 5
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
Thallius Swing Tabelle nach Datumsspalte sortieren AWT, Swing, JavaFX & SWT 4
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
E Tabelle zeigt nicht neuste Datenbankeinträge an AWT, Swing, JavaFX & SWT 5
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4
O Tabelle "animiert" Scrollen AWT, Swing, JavaFX & SWT 1
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
G JavaFX ComboBoxTableCell für Zuordnung in Tabelle AWT, Swing, JavaFX & SWT 2
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
L Tabelle reagiert ungewollt auf Mausklick AWT, Swing, JavaFX & SWT 6
C Verschiebbare "Buttons" in einer Tabelle AWT, Swing, JavaFX & SWT 3
S Swing Tabelle mit Model bei eingeschaltetem Filter synchronisieren AWT, Swing, JavaFX & SWT 6
P Listener Auswahl Tabelle AWT, Swing, JavaFX & SWT 6
B LayoutManager Tabelle repainten AWT, Swing, JavaFX & SWT 4
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
F Elementbezeichnung in der Tabelle AWT, Swing, JavaFX & SWT 7
F Tabelle sortieren AWT, Swing, JavaFX & SWT 3
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
T Spaltennamen jeweils der angezeigten Tabelle anpassen AWT, Swing, JavaFX & SWT 19
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
B Tabelle anpassen AWT, Swing, JavaFX & SWT 6
N jComboBox mit eigenem Renderer und eigenem Datentyp als Rückgabe in einer Tabelle AWT, Swing, JavaFX & SWT 2
N Button akivieren, wenn Tabelle verändert worden ist AWT, Swing, JavaFX & SWT 2
C SWT refresh einer Tabelle AWT, Swing, JavaFX & SWT 4
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
C SWT Tabelle mit Werten befüllen AWT, Swing, JavaFX & SWT 5
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
S Tabelle sortieren, mit Ausnahme der letzten Zeile AWT, Swing, JavaFX & SWT 9
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
_dp Swing ScrollPane unterschlägt Großteil der Tabelle AWT, Swing, JavaFX & SWT 7
_dp Swing Tabelle: Ausklappbare Einträge AWT, Swing, JavaFX & SWT 2
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
S Tabelle im selben Formular anzeigen AWT, Swing, JavaFX & SWT 6
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
M Im Frame wird nur die Menüleiste erstellt und nicht die Tabelle? AWT, Swing, JavaFX & SWT 3
A SWT Tabelle (elegant) sortieren AWT, Swing, JavaFX & SWT 2
D Scrollbar für Tabelle AWT, Swing, JavaFX & SWT 2
A Button in Tabelle ansprechen AWT, Swing, JavaFX & SWT 6
O Tabelle laden - Prozessorlast 100% ?? AWT, Swing, JavaFX & SWT 11
F Tabelle und Bildindex (Thumbnails) AWT, Swing, JavaFX & SWT 4
A SWT Tabelle Sortieren AWT, Swing, JavaFX & SWT 3
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
Airwolf89 Swing Exception beim Füllen einer Tabelle AWT, Swing, JavaFX & SWT 10
D Swing Tabelle sortieren AWT, Swing, JavaFX & SWT 4
B tabelle mit labeln AWT, Swing, JavaFX & SWT 2
M sortierbare Tabelle mit jface und databinding AWT, Swing, JavaFX & SWT 3
H ArrayList?! in Tabelle AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben