JavaFX Unterschiede zwischen Scene Builder 2.0 und der ausgeführten App

Moin,

ich habe ein neues FXML Dokument gemacht und muss feststellen, dass es da teilweise extreme Unterschiede zwischen der ausgeführten App und dem Scene Builder gibt.

Ich habe mich natürlich im Vorfeld kundig. So habe ich nicht einfach alles auf ein Pane geklatscht sondern sondern Hboxen genutzt und ein GridPane.

Gut, das ImageView ist tatsächlich einfach nur draufgeklatscht in dieser Version, aber dass wo seltsam aussieht ( Textfield ) befindet sich in einer VBox. Und komischerweise hatte ich dieses Problem ein FXML Dokument vorher nicht :D
12118
12117
 

Anhänge

Hast du, nachdem du die FXML Datei im SceneBuilder bearbeitet hast, die Datei mal in deiner IDE aufgemacht und geschaut, ob sich der Code dort auch aktualisiert?
 
Jup. Habe ich. Ich weiß was du meinst. Die Bilder wo ich gepostet habe, sind nur ein kleiner Ausschnitt an Effekten. Manchmal haben auch die Textfelder seltsame Außmaße. Ich hab jetzt eigentlich nix anders gemacht.

Sind die Controls im Scene Builder zusammengequetscht bis zum geht nicht mehr, sind beim ausführen der App riesige Abstände, die im keinster Weise zusammenpassen.

Ist dass denn eine saubere Lösung?:

Ebene 1: Anchor Pane
Ebene 2: Grid Pane
Ebene 3. div. Panes inkl Controlls

Oder wäre es ratsam den Scene Builder 1 zu nehmen? Hab schon an mehreren Stellen gelesen, dass der "ausgereifter" sein soll.
 
Ist dass denn eine saubere Lösung?:
Das kommt ganz drauf an was du machen willst. :p

Oder wäre es ratsam den Scene Builder 1 zu nehmen? Hab schon an mehreren Stellen gelesen, dass der "ausgereifter" sein soll.
Welchen von beiden jetzt besser ist kann ich dir nicht sagen. Ich nehm - wenn überhaupt - den, der in Intellij von Haus aus drin ist.

Poste vielleicht einfach mal deinen FXML Code .. dann kann man mal schauen ob es ggf. ein Problem mit deinem Code gibt.
 
Code:
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="681.0" prefWidth="490.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Pane prefHeight="681.0" prefWidth="490.0">
         <children>
            <Label layoutX="244.0" layoutY="125.0" />
            <VBox layoutX="236.0" layoutY="46.0" prefHeight="342.0" prefWidth="235.0">
               <children>
                  <Label text="Label" />
                  <TextField />
                  <Label text="Label" />
                  <TextField prefHeight="51.0" prefWidth="221.0" />
                  <Label text="Label" />
                  <TextField />
               </children>
            </VBox>
         </children>
      </Pane>
   </children>
</AnchorPane>
Das sieht dann so aus

12120
 
Hab das probiert was auf der Seite deines LInks steht. Hat sich nix geändert. Auch wenn wenn das klappt.. Warum macht er beim setzten von Textfelder unterschiedliche Größen? Aber das Bedarf keines Kommentars. Denn es gibt keinen Grund dafür. Das leg ich jetzt hiermit fest :p

Ja ich nutze leider gewzungenermaßen Eclipse. Aber ich werd wieder zu intellij switchen. Nutze Eclipse nur wegen einer kommenden Ausbildung in dem Bereich. Aber naja. War trotzdem von Vorteil. Jetzt kenne ich Eclipse und Intellij und weiß, wer von Beiden die Nase vorne hat.
 
Ok, ich habe jetzt alles nach Intellij transferiert und muss sagen, dass da das gleiche Problem ist. Es ist ja praktisch auch der gleiche Scene Builder.

Um das Problem zu verdeutlichen, habe ich nochmal aussagekräftigere Screenshots gemacht. Kurz: Im Scene Builder hab ich beinahe Platzangst um meine Controls zu setzen, aber sobald die App ausgeführt wird, prangen Kilometerweite Klüfte zwischen den Controls.

Woran liegt das nur o_O
1212312124


Die Controls befinden sich übrigends in Vboxen. Außer das ImageView. Das schwebt "frei".


Danke im Voraus
 
Für einen Moment, hatte ich tatsächlich gehofft das wäre der Fall. Aber leider nein. Wenn ich das Fenster per Buttonclick öffne, wird keine Größe für die Scene festgelegt. Aber eventuell sollte ich genau das tun?

Damit öffne ich das Fenster:

Code:
 @FXML
    private void handleButtonActionGiveKey(ActionEvent event) {

        try {
            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("KeyUser.fxml"));
            Parent root1 = (Parent) fxmlLoader.load();
            Stage stage = new Stage();
            stage.setTitle("Key User Management");
            
            stage.setScene(new Scene(root1));
            stage.show();
        }catch(Exception ex) {ex.printStackTrace();}
 
Im Scene Builder hab ich beinahe Platzangst um meine Controls zu setzen, aber sobald die App ausgeführt wird, prangen Kilometerweite Klüfte zwischen den Controls.
Ich würde meinen, dass der Inhalt entsprechend der verfügbaren Fläche verteilt wird. Also ist entweder die Fenstergröße fix einzustellen oder mittels geeigneter Einstellungen das Verhalten der Elemente bei Größenänderung des Fensters festzulegen.

Ich kann dir allerdings grad nicht genau sagen wie, sorry.
 
Ich bin deiner Vermutung gefolgt, leider keine Änderung in Sicht. Ich hab gegoogelt und da haben auch einige dieses Problem. Da lag es aber an anderen Dingen, die bei mir richtig sind.

Dieser Scene Builder bereitet mir Kopfschmerzen. Ich halte mich schon viel zu lange wieder mit diesem Firlefanz auf und so langsam werde ich porös.

Hier ein anderes Beispiel:


Scene Builder:
12125

Running App:
12126

Da ist es im Scene Builder beschissen aber in der laufenden App richtig.

Das muss doch ne Ursache haben.....Ich habe auch schon mit den Scaling Properties rumgespielt. Leider auch kein Unterschied.

Manchmal kann ich auch plötzlich keine Controls mehr verschieben oder wo reinsetzen, oder die Pane Größe verändern über die Pfeile. Ich muss dann übers Menü gehen. Speicher ich ab, schließe das Fenster und öffne es neu, geht es plötzlich wieder.

Mit diesen Scene Buildern tut mir der Arsch weh.
 
Zuletzt bearbeitet:
Wenn ich es richtig im Kopf hab, kann Eclipse mit e(fx)clipse, und IntelliJ out-of-the-box, sehr gut mit FXML umgehen. Ich weiss, dass der SceneBuilder verlockend ist, aber ich habe ihn tatsächlich nie benutzt - also seit JavaFX 2.1 oder so vorgestellt wurde. Stattdessen ist der Live-Preview in e(fx)clipse ziemlich praktisch.

Ich hab noch nie den Sinn des Einsatzes von AnchorPane verstanden, aber das ist wohl auch Geschmackssache.
Ich würde jedoch vermuten, dass hier der ImageView nicht eingeschränkt ist, wieviel Höhe er haben darf und irgendwo anders ist ein PrefWidth drauf und schon ist alles kaputt. Schau vielleicht da mal nach... Eventuell liegt da ja der Hund begraben.
 
Es ist zwar schon eine Weile her das diese Thema hereingestellt wurde aber Grundsätzlich wird ja die Scene und die Achorpain in der "Main" erstellt mit der Größenangabe aber die Verknüpfung in SceneBuilder mit der Main hat nicht zur Folge das die Größen übernommen werden. Die Main ertsellt auch nicht das FXML Dokument. Also ist grundsäzlich alles in SceneBuilder zu erstellen. Das Anchorpane ist eine Fläche falschendie auf die ensprechende Größe gezogen oder im Editor recht eingegeben werden muß. Ist die Anchorpane an der falschen Stelle bzw die Borderpane ist das Bild was gezeigt wird das Ergebnis. Also Anchorpane links selektieren und die Blauen Ecken großziehen oder recht die High and Wight eingeben .
 
Sorry dein FXML dokument oben träumt von diesen Dingen kannes sein das deine Classe zwar das FXML Dokument irgendwie aufruft aber die Komponenten die in deiner KLasse eigegeben wurden nur teilweise ins Fenster passen. Oder ganz banal. Ich habe noch nicht erlebt das die Komponenten aus einer Klasse herangezogen werden um ein FXMLDokument zu erstellen. Ich würde zu gern wissen wie man das Macht. Ich habe es mit dem verknüpen der Main im Builder versucht. ergebnis (nix) Du hast offensichlich beides getan. IN deiner KLasse die Gridpane und Pain usw.die aber nicht in deinem FXMLDokument und eine pane und drei Label im FXML Dokument. der Rest aus der Classe ist nicht wiederzufinden.Dein Run löst beide Vorgänge aus ujnd vermischt beides.Wie das dann verarbeitet wird enzieht sich meiner Kenntnis.
SceneBuilder generiert für die Kontrolls und die Komponenten den Aufruf aber die größe und das Verhalten wird im FXMLDokument gespeichert.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben