JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen

Diskutiere Tabelle zeilenweise mit Werten füllen und an Container anpassen im AWT, Swing, JavaFX & SWT Forum; JAAAAHAHAHA, endlich funktoniert es. Eigentlich wollte ich das Minimalprogramm posten und fragen wo es klemmt, während des Schreibens ging es...

  1. White_Fox
    White_Fox Neues Mitglied
    JAAAAHAHAHA, endlich funktoniert es.

    Eigentlich wollte ich das Minimalprogramm posten und fragen wo es klemmt, während des Schreibens ging es dann aber doch irgendwann. :)

    Für Interessierte poste ich das Programm trotzdem:
    Code (Text):

    package commontests;

    import javafx.application.Application;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.scene.Scene;
    import javafx.scene.layout.BorderPane;
    import javafx.stage.Stage;
    import org.controlsfx.control.spreadsheet.Grid;
    import org.controlsfx.control.spreadsheet.GridBase;
    import org.controlsfx.control.spreadsheet.SpreadsheetCell;
    import org.controlsfx.control.spreadsheet.SpreadsheetCellType;
    import org.controlsfx.control.spreadsheet.SpreadsheetView;

    /**
     *
     * @author White_Fox
     */
    public class SpreadsheetviewTest extends Application{
       
       public static void main(String[] args) {
           launch(args);
       }

       @Override
       public void start(Stage primaryStage) throws Exception {
           BorderPane rootPane = new BorderPane();
           Scene mainscene = new Scene(rootPane, 1000, 600);
                   
           Grid grid;
           SpreadsheetView view;
           ObservableList<SpreadsheetCell> row;
           ObservableList<ObservableList<SpreadsheetCell>> rows;
           SpreadsheetCell cell;
           String s;
           
           view = new SpreadsheetView();
           grid = new GridBase(4, 4);
           rootPane.setCenter(view);
           primaryStage.setScene(mainscene);
           primaryStage.show();
           
           rows = FXCollections.observableArrayList();
           
           for (int i = 0; i < 4; i++) {
               row = FXCollections.observableArrayList();
               for (int j = 0; j < 4; j++) {
                   s = "x";
                   if((i == 1 || i == 2) && (j == 1 || j == 2)){
                       s = "s";
                   }
                   cell = SpreadsheetCellType.STRING.createCell(i, j, 1, 1, s);
                   row.add(cell);
               }
               rows.add(row);
           }
           grid.setRows(rows);
           grid.spanColumn(2, 1, 1);
           grid.spanColumn(2, 2, 1);
           view.setGrid(grid);
       }
    }
     
    Jetzt muß ich nur noch zusehen was in meinem eigentlichen Programm noch klemmt. Kann ja nicht so viel sein...
     
  2. White_Fox
    White_Fox Neues Mitglied
    So...ich nochmal.

    Die Spreadsheetview funktioniert ganz gut und zeigt alles so an wie ich will, hat aber noch eine Häßlichkeit: Sie läßt sich schlecht an die Fenstergröße anpassen und so wie ich das bisher sehe, ist das auch nicht so einfach machbar.
    Im Prinzip will ich genau das gleiche wie der hier (nur mit Spreadsheetview anstatt der TableView):
    https://stackoverflow.com/questions/32510309/resizing-tableview-to-fit-scrollpane

    Jetzt überlege ich mir, das mit TableView2 zu machen und stoße wieder auf das Problem der unsäglichen Datenanzeige. Ich weiß zur Kompilierzeit nicht, wie die Daten heißen die ich anzeigen lassen will und kann dementsprechend keine Methoden bereitstellen.

    Frage:
    Hat jemand eine Idee, wie die Spreadsheetview an die Größe eines TabPanes angepasst werden kann (und mitgeht, wenn die Fenstergröße geändert wird)? Wäre mir am liebsten, da weniger Umbau.

    Alternativ:
    Kennt jemand einen Weg, die TableView2 auf anderen Wegen mit Daten zu füllen? Eine Liste übergeben oder so? So wie ich das gerade sehe gibt das Codebeispiel von den Machern leider nichts anderes her. :(

    Wenn es nicht anders geht: Ich nehm auch alternative Vorschläge...
     
  3. White_Fox
    White_Fox Neues Mitglied
    Jippieh, jetzt hab ich es endgültig gelöst. Für die die dasselbe Problem haben:
    Zunächst hab ich die Spreadsheetview in eine TabPane geworfen. Das hatte die merkwürdige Größe der Spreadsheetview zur Folge.

    Jetzt hab ich die Spreadsheetview in eine StackPane gelegt, und die StackPane in die TabPane gelegt und nun ist die Spreadsheetview genauso groß wie die TabPane und geht mit wenn die Größe der TabPane geändert wird.
     
    mihe7 gefällt das.
  4. dzim
    dzim Bekanntes Mitglied
    Nur rein zu Info-Zwecken: War kürzlich auf den JavaFX Days in Zürich. Auch, weil ich den Veranstalter und einige der Typen teils persönlich kenne (aber nur vom Quatschen und Twitter-"Friend" :D, jetzt nicht super-Dicke, aber man kennt sich halt), die in der JavaFX-Scene recht bekannt sind - z.B. den jetzigen JavaFX-Co-Lead, Johan Vos.

    Kernaussage zum Thema TableView, dem sich die meisten angeschlossen haben: TableView sucks! ;)
    Ich denke @mihe7 hat schon ein paar gute Tipps ausgegraben. Auch wenn ich mit JavaFX recht gut zurecht komme, hätte ich für dein Thema, @White_Fox, auch erst einmal recherchieren müssen...
     
    White_Fox gefällt das.
  5. dzim
    dzim Bekanntes Mitglied
    PS: @White_Fox Glückwunsch, dass du dein Problem in den Griff bekommen hast!
    Neugierige Frage meinerseits: Verwendest du bereits OpenJavaFX 11 oder noch JavaFX 8?
     
  6. White_Fox
    White_Fox Neues Mitglied
    Hallo dzim
    Ich arbeite gerade mit Java 8.

    Ich denke zwar nicht daß Oracle mir wegen meinem Programm eine Rechnung schicken wird (es bleibt eine Einzel-PC-Anwendung, möglicherweise werde ich sie auch bei Sourceforge reinstellen wenn ich mit dem Ergebnis ausreichend zufrieden bin), dennoch würde ich lizenztechnisch gern sauber bleiben. Allein schon weil eine gewerbliche Nutzung nicht auszuschließen ist. Genaugenommen will ich mir damit meine tägliche Arbeit erleichtern.
    Soweit ich weiß betrifft Oracles Wunsch, die Java-Orange auszupressen, nur Servergedöns. Sofern "auspressen" überhaupt so gesagt werden kann, ich kann das nicht einschätzen. Ich hab nur den ein oder anderen Heise-Artikel darüber gelesen.

    Wie auch immer-ich hab einfach noch keine Zeit (und Lust) gehabt den ganzen Oracle-Schriebs zu lesen. Und ehrlich gesagt auch die Englisch-Kenntnisse. Datenblätter und Forenunterhaltungen sind kein Problem, aber um Verträge juristisch einigermaßen sicher lesen zu können fehlt es mir einfach. Das ist im Deutschen schon schwer genug.

    Wie gestaltet sich eigentich der Umstieg vom Oracle-JDK zu OpenJDK? Muß da viel umgestellt werden, läuft es genauso stabil?
     
  7. Flown
    Flown Administrator Mitarbeiter
    OracleJDK = OpenJDK + commercial features
    Da muss man gar nichts umstellen.
     
  8. dzim
    dzim Bekanntes Mitglied
    Also noch mal wegen der Lizenzkosten: Oracle JDK 8 = kein Problem! Kannste verteilen, wird sich keiner dran stören.

    Java 11 + OpenJFX 11 -> Grundsätzlich hat @Flown recht, kein Unterschied.

    Aber:
    Leider doch. Open JDK hat nie JavaFX enthalten. Mit OpenJFX 11 ist es recht easy geworden: Dependency hinzufügen und fertig (bitte mal auf https://openjfx.io nachlesen).

    Jedoch:
    Danke Java 9 hat sich von 8 zu 11 schon einiges geändert (Modulsystem, keine javapacker Ttool mehr integriert - kann man aber separat bekommen (siehe hier), ...).

    Fazit: Einfach probieren! Stabilität wird kein Problem sein, im Gegenteil, es wurden Verbesserungen wie neuere WebKit-Engine etc. hinzugefügt.
     
    White_Fox gefällt das.
  9. mihe7
    mihe7 Bekanntes Mitglied
    Ich würde das anders sehen; mit Server/nicht Server hat das erstmal gar nichts zu tun (ja, die Preise sind anders).

    Abstrakt betrachtet, hat sich eigentlich nichts geändert: man konnte schon immer zwischen unsupported (kostenlos) und supported (kostenpflichtig) wählen. Und das ist auch künftig so.

    Die kostenlose Version wird jetzt unter dem Namen "Oracle OpenJDK" über andere Seiten (z. B. https://jdk.java.net/11/) verteilt, während die kostenpflichtige Variante "Oracle Java" heißt und auf der gewohnten Downloadseite von Oracle erhältlich ist.

    Problematisch kann das lediglich bei Java 8 werden, denn während das Oracle JDK/JRE für Java 8 nach wie vor frei ist, fallen Updates, die ab Februar erscheinen, unter die neue Lizenz und sind somit kostenpflichtig, sobald sie im kommerziellen Umfeld zum Einsatz kommen. Das ist insofern nicht ganz ungefährlich, weil zeitgleich Updates für den Privatgebrauch kostenfrei bis 2020 erscheinen.

    Was das allerdings mit Deinem Programm zu tun hat, erschließt sich mir nicht. Du stellst ja bis Java 8 in der Regel nicht das JDK/JRE zur Verfügung sondern nur Deine Anwendung. Welche Java-Implementierung der Anwender nutzt, um sie laufen zu lassen, ist sein Problem.

    Falls Du doch ein Bundle anbietest, dürfte es völlig egal sein, ob Du ein Oracle Java 8 (bis u201/u202, die am 15. Januar erschienen sind) oder ein OpenJDK 8+JavaFX dazupackst.

    Alles natürlich nur meine persönliche Sichtweise, ohne Anspruch auf Korrektheit :)
     
    White_Fox gefällt das.
  10. White_Fox
    White_Fox Neues Mitglied
    Vielen Dank...das ist doch schonmal ein kleiner Überblick.

    Nun, ich würde dem Installationspaket durchaus eine JRE-Installation beilegen. In der Registry schauen ob Java installiert ist, wenn nicht wird das Java-Installationsprogramm ausgeführt. NSIS macht es ja sehr einfach.

    Das macht es dem Benutzer halt einfach. (Jaja, typisch Windows-Nutzer... ;))
     
    mihe7 gefällt das.
  11. Wenn du Java lernen möchtest, empfehlen wir dir dieses Buch hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Tabelle zeilenweise mit Werten füllen und an Container anpassen - Ähnliche Themen

Denkanstoß bei Abschreibungstabelle in DB speichern
Denkanstoß bei Abschreibungstabelle in DB speichern im Forum Datenbankprogrammierung
Erstellung einer Währungsrechnungstabelle
Erstellung einer Währungsrechnungstabelle im Forum Java Basics - Anfänger-Themen
Neuen Eintrag in Tabelle einfügen
Neuen Eintrag in Tabelle einfügen im Forum Hausaufgaben
Tabelle aus CSV, 2 dimensionale HashMap?
Tabelle aus CSV, 2 dimensionale HashMap? im Forum Allgemeine Java-Themen
Problem mit Insert in zwei Tabellen
Problem mit Insert in zwei Tabellen im Forum Datenbankprogrammierung
Thema: Tabelle zeilenweise mit Werten füllen und an Container anpassen