JavaFX - Komponenten skalieren

programmierer12

Bekanntes Mitglied
Hallo zusammen ich habe einmal eine Frage zu JavaFX:
Wenn ich eine Fxml-Datei habe die ein bestimmtes Format hat in der einige Komponenten sind,
kann ich in meinem code
Code:
stage.setFullScreen(true);
verwenden um die Software im Vollbildmodus erscheinen zu lassen. Nun will ich aber dass sich die Komponenten auch entsprechend der Stage skalieren. Geht das mit irgendeinem Befehl oder muss ich da selbst Hand anlegen um die ganzen Größen zu ändern?

Mit freundlichen Grüßen
programmierer12
 

dzim

Top Contributor
Erstens: Falsches Unterforum. Es gehört nach hier: AWT, Swing, JavaFX & SWT

Zweitens: Kommas setzt du frei nach Tageslaune, oder? :p Dein erster (langer) Satz enthält genau eins. Gefühlt müssten da aber vier rein ("Wenn ich eine Fxml-Datei habe, die ein bestimmtes Format hat, in der einige Komponenten sind,
kann ich in meinem Code [c]stage.setFullScreen(true);[/c] verwenden, um die Software im Vollbildmodus erscheinen zu lassen.")... Das gilt natürlich leider auch für den Folgesatz... Und generell auch für alle anderen Sätze ;-)

ABER zr Frage:
Ich vermute, du hast vorher noch nicht viele Oberflächen geschrieben, nicht wahr? Dein Zauberwort heisst "Layout". Du musst deine Widgets in solche verpacken (wobei Kind-Elemente von Layouts auch wieder andere Layouts sein können, um komplexe Oberflächen zu ermöglichen), damit am Ende die UI brauchbar wird. Darüber hinaus sind für einige Layouts auch noch ein paar weitere Konfigurationen nötig ("Sollen in einer HBox (Hinweis: Alle Kinder werden horizontal angeordnet) bestimmte Einträge den noch verfügbaren Platz auffüllen, oder nicht? ...").

--> Working With Layouts in JavaFX: About This Tutorial | JavaFX 2 Tutorials and Documentation (Der Link zeigt zwar noch auf die Tutorials von JavaFX2 aus Java7, und nicht auf JavaFX8 aus Java8, aber die API ist Grundsätzlich identisch.)

--> Client Technologies: Java Platform, Standard Edition (Java SE) 8 Release 8 (Allgemein werden hier die diversen Client-Technologien von Standard-Java beschrieben.)

--> JavaFX: Working with Layouts in JavaFX Release 8 - Contents (Noch mal JavaFX-Tutorials speziell für Java8.)

Happy Coding!
 

programmierer12

Bekanntes Mitglied
Tut mir leid dass ich jetzt nochmal hier zu diesem Thema frage aber ich wollte keine neue Diskussion aufmachen. Nach deiner Antwort habe ich mir das ganze einmal angeschaut und aufgrund dessen ein Fenster mit einer BorderPane erzeugt wo im oberen Teil die MenuBar liegt. Nun habe ich ein Gridpane, dass ich mittig auf der BorderPane platziert habe. Nun möchte ich aber, dass die Gridpane immer noch mittig liegt, wenn ich das Fenster im Vollbildmodus anzeige. Wie kann ich so etwas machen (ich meine mit den Layouts)

MFG
programmierer12
 

dzim

Top Contributor
Ich verwende BorderPane recht selten, aber ich denke, solange es keine weiteren Child-Elemente (links, rechts oder unten) hat, wird das mittige Element immer den vollen Platz einnehmen. Evtl. Musst du da jetzt, wie gesagt, noch weitere Layouts einbetten.
Da du aber wenig - bis keine - Informationen über deine UI gibst, wird es aber auch nicht soooooo leicht, dir da brauchbar weiter zu helfen. Mach vielleicht ein Mockup und hänge es mal an deinen nächsten Post an...
 

programmierer12

Bekanntes Mitglied
Also ich habe euch einmal einen Screenshot gemacht und auf diesem die Situation ein wenig verdeutlicht. Also, ich habe zuerst ein Fenster mit einem BorderPane im TOP Bereich eine MenuBar im BOTTOM, LEFT und RIGHT bereich habe ich, mit blau markiert, einfach Panes als Platzhalter. Und im Center, mit rot markiert, ein GridPane, dass meine Komponenten enthält.
Ich hoffe das hilft euch weiter.
MFG
programmierer12
 

Anhänge

  • Bild 1.png
    Bild 1.png
    27,8 KB · Aufrufe: 86

Joose

Top Contributor
Also, ich habe zuerst ein Fenster mit einem BorderPane im TOP Bereich eine MenuBar .....

Ich weiß ja nicht genau wie das bei JavaFX ist aber in Swing kann man eine JMenuBar dem Frame hinzufügen ... nicht dem Layout. Dann fügt man an der Position TOP einfach ein leeres JPanel hinzu und wenn keine fixen Größen und Abstände gegeben sind teilen sich TOP, MIDDLE/CENTER und BOTTOM den Platz gleichmäßig auf!
 

programmierer12

Bekanntes Mitglied
In JavaFX kannst du zwar dem Fenster eine MenuBar verpassen aber diese ändert dann nicht die Größe wenn du das Fenster vergrößerst, deshalb das Borderpane.
 

Joose

Top Contributor
Inwiefern sollte die MenuBar ihre Größe ändern?

Meiner Meinung nach soll diese immer die gleiche Höhe haben und sich nur der Länge dem Fenster anpassen (also das die Menüleiste über den ganzen Frame geht und nicht nur den benötigten Platz einnimmt)
 

Joose

Top Contributor
Ich kann mir nicht vorstellen das man JavaFX explizit eine MenuBar setzen kann, diese aber nicht ihre Länge an das Fenster anpasst! (So wäre JavaFX nicht zu gebrauchen für Anwendungen mit Menü)

Kann es sein das du der MenuBar eine entsprechende Weite gegeben hast und sich die Größe daher nicht angepasst hat?
 

programmierer12

Bekanntes Mitglied
Ja du musst der MenuBar eine explizite Size geben, deshalb habe ich sie ja auch in das BorderPane gepackt. Aber anstatt dich damit zu befassen(was meiner Meinung nach total überflüssig und sinnlos ist) könntest du ja mal schauen ob du mir bei meinem eigentlichen Problem helfen kannst.
MFG
programmierer12
 

dzim

Top Contributor
@Joose: In JavaFX ist eine MenuBar ein Widget wie jedes andere (und so sollte es IMHO auch immer sein!). Du kannst es damit in einem Layoutz platzieren, wo du willst. Die Grösse wird dabei entweder abhängig vom Layout (BorderPane to und bottom, VBox, u.ä. in automatisch in voller Breite), oder von deinen Set-Up berechnet. Es wird also nicht explizit dem Pane via z.B. einer expliziten #setMenuBar()-Methode zugeordnet. Dadurch kann man - z.B. via CSS - die Form, Farbe, Höhe, oder was auch immer den Wünschen anpassen. Das gild natürlich auch für die Menu-Widgets oder MenuItem-Widgets.

Zum Thema:
Wenn du also den Platz links und rechts frei haben willst, kannst du es entweder via maximaler Breite/Höhe des GridPanes machen, oder indem du Platzhalter verwendest, die die verfügbare Breite einnehmen.
Ich hätte für den Fall hier vermutlich auf ein BorderPane verzichtet, aber auf jeden Fall auf das GridPane, da du nur eine Spalte verwendest: Dafür ist eher eine VBox sinnvoll.

Mittels e(fx)clipse-Plugin habe ich mir zum Test innerhalb von 5min folgende FXGraph-Datei erstellt (Das ist eine spezielle JSON-ähnliche DSL. Diese wird dann automatisch zu einer regulären FXML-Datei kompiliert).

FXGraph:
Code:
package application

import javafx.scene.layout.BorderPane
import javafx.scene.control.MenuBar
import javafx.scene.control.Menu
import javafx.scene.control.MenuItem
import javafx.scene.control.SeparatorMenuItem
import javafx.scene.layout.GridPane
import javafx.scene.layout.VBox
import javafx.geometry.Insets
import javafx.scene.control.TextField
import javafx.scene.control.Button
import java.lang.Double

component BorderPaneTest {
	BorderPane {
		top : MenuBar id menuBar {
			Menu id menuFile {
				text : "File",
				MenuItem id menuItemExit {
					text: "Exit"
				}
			},
			Menu id menuHelp {
				text : "Help",
				MenuItem id menuItemHelp {
					text : "Help"
				},
				SeparatorMenuItem id separatorMenuItem {
				},
				MenuItem id menuItemAbout {
					text : "About"					
				}
			}
		},
		center : VBox id vBoxCenter {
			spacing : 10,
			maxWidth : 300,
			maxHeight : 400,
			TextField id textFieldUser {
				promptText : "Username",
				alignment : "CENTER"
			},
			TextField id textFieldPasswd {
				promptText : "Password",
				alignment : "CENTER"
			},
			Button id buttonLogin {
				text:"Log in",
				alignment : "CENTER",
				maxWidth : const Double#MAX_VALUE
			},
			static margin : Insets {
				left:5,top:5,right:5,bottom:10
			},
			static alignment : "CENTER"
		}
	}
}

--> FXML:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Do not edit this file it is generated by e(fx)clipse from ../src/application/BorderPaneTest.fxgraph
-->

<?import java.lang.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.SeparatorMenuItem?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>

<BorderPane xmlns:fx="http://javafx.com/fxml">

<top>
<MenuBar fx:id="menuBar">
<Menu fx:id="menuFile" text="File">
<MenuItem fx:id="menuItemExit" text="Exit"/>
</Menu>
<Menu fx:id="menuHelp" text="Help">
<MenuItem fx:id="menuItemHelp" text="Help"/>
<SeparatorMenuItem fx:id="separatorMenuItem"/>
<MenuItem fx:id="menuItemAbout" text="About"/>
</Menu>
</MenuBar>
</top>
<center>
<VBox fx:id="vBoxCenter" spacing="10" maxWidth="300" maxHeight="400" BorderPane.alignment="CENTER">
<TextField fx:id="textFieldUser" promptText="Username" alignment="CENTER"/>
<TextField fx:id="textFieldPasswd" promptText="Password" alignment="CENTER"/>
<Button fx:id="buttonLogin" text="Log in" alignment="CENTER">
<maxWidth><Double fx:constant="MAX_VALUE" /></maxWidth>
</Button>
<BorderPane.margin>
<Insets left="5" top="5" right="5" bottom="10"/>
</BorderPane.margin>
</VBox>
</center>
</BorderPane>
[/XML]

--> Screenshot:
2ut1c1x.png


Ignorier erst mal die hässlichen Darstellungsfehler, das könnte an meinem Linux liegen... ;-)

#edit: Nachtrag: Ich habe die VBox für die Textfelder und den Button allerdings immer Zentriert - vielleicht auch nicht immer das, was du willst. Und das Passwort-Feld sollte natürlich eigentlich vom Typ Password sein, nicht TextField...
 
Zuletzt bearbeitet:

programmierer12

Bekanntes Mitglied
Genau das war es was ich gebraucht habe! Aber könntest du mir noch sagen was du als Platzhalter genommen hast und wie du es hin bekommen hast, dass die Komponenten immer in der Mitte sind?!

Nachtrag:
Noch ein paar Fragen
1) Wie hast du den Abstand der Komponenten in der VBox verändert?
2) Wie ist die VBox zentriert bei mir nimmt sie den gesamten Platz ein?
MFG
programmierer12
 
Zuletzt bearbeitet:

dzim

Top Contributor
Wie du im FXML sehen kannst, habe ich keine Platzhalter verwendet, sondern die drei Parameter hier an der zentralen VBox
Code:
maxWidth="300" maxHeight="400" BorderPane.alignment="CENTER"
.
Mehr nicht.

#edit: Du könntest es aber mal mit TOP_CENTER versuchen, das könnte für deinen Use-Case besser passen. Und bitte zieh den Post in den entprechenden Thread um... :)
 
Zuletzt bearbeitet:

dzim

Top Contributor
Feste Grösse: Ja.

Verschieben: Ich glaub, das kann nur ein Moderator. Also am besten das Thema hier als erledigt markieren und im anderen Unterforum dann neues Thema erstellen.

#edit: Feste Grösse: Jain. Ich habe eine maximale Grösse festgelegt, aber es kann schon kleiner werden, das ist noch erlaubt.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Netbeans mit JavaFX, FXML und Scenebuilder Java Basics - Anfänger-Themen 11
Juelin javaFX mit Elementen Java Basics - Anfänger-Themen 6
Juelin Netbeans und javafx Java Basics - Anfänger-Themen 6
M Wo den Ordner javafx-sdk-21.0.2 unter Linux ablegen? Java Basics - Anfänger-Themen 5
A Kapazität JavaFX TextField Java Basics - Anfänger-Themen 4
L JavaFX - grundlegende Verständnisprobleme Java Basics - Anfänger-Themen 1
S JavaFX Java Basics - Anfänger-Themen 1
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
A JavaFX Toggle_Button_Disable Java Basics - Anfänger-Themen 2
ac83 JavaFX - Kompilierungsproblem Java Basics - Anfänger-Themen 1
R Intellij javafx --> jar Java Basics - Anfänger-Themen 11
O Compiler-Fehler JavaFX fmxl LoadExeption Java Basics - Anfänger-Themen 4
M Javafx Timeline Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
A JavaFX-Filechooser Java Basics - Anfänger-Themen 5
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
A JavaFx - SceneBuilder Java Basics - Anfänger-Themen 5
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
G Javafx Eventhandler zu jedem Node Java Basics - Anfänger-Themen 1
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
T HTMLEditor JavaFX Java Basics - Anfänger-Themen 4
E JavaFX Editor Probleme mit der Zwischenablage Java Basics - Anfänger-Themen 12
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
D Mit Objekten rechnen, Textfield, JavaFX, Noob Java Basics - Anfänger-Themen 8
P Probleme bei der Installation von JavaFX Java Basics - Anfänger-Themen 3
R Umsetzungsplan JavaFx App Java Basics - Anfänger-Themen 9
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
P JavaFx einrichten Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Javafx ListView kann nicht gefüllt werden. Java Basics - Anfänger-Themen 6
D JAVAFX WebVIEW zu JSOUP Java Basics - Anfänger-Themen 3
D Folgende Fehlermeldung bei der Installation von JAVAFX Java Basics - Anfänger-Themen 1
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
J javafx mediaplayer mit https Java Basics - Anfänger-Themen 3
J JavaFX Label,Button zur Laufzeit Java Basics - Anfänger-Themen 30
D Ausführbare jar/exe aus JAVAFX Projekt erstellen (IntelliJ) Java Basics - Anfänger-Themen 14
O JavaFX XML Versuch Java Basics - Anfänger-Themen 2
O JavaFX Java Basics - Anfänger-Themen 7
M JavaFX-Übung Autospiel Java Basics - Anfänger-Themen 4
M JavaFX: Fenster bleibt weiß Java Basics - Anfänger-Themen 3
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
L JavaFx ListView rechts abgeschnitten Java Basics - Anfänger-Themen 0
I Javafx Tabpane Reiter blockieren Java Basics - Anfänger-Themen 1
S JavaFX Beginneraufgabe Java Basics - Anfänger-Themen 1
W JavaFX import Fehler/Zellularautomaten Java Basics - Anfänger-Themen 1
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
CptK mit javafx button erstellen Java Basics - Anfänger-Themen 1
U Javafx Array aus Buttons Java Basics - Anfänger-Themen 2
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
K Erste Schritte JavaFX - wie von "externer" Klasse auf Methoden des Controllers zugreifen Java Basics - Anfänger-Themen 2
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
D JavaFX, Verweis auf Datei im Projekt Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
M JavaFX: Problem mit der TableView Java Basics - Anfänger-Themen 0
P JavaFX ohne FXMLLoader Java Basics - Anfänger-Themen 3
K JavaFX UI controls Java Basics - Anfänger-Themen 1
B Farbverlauf erstellen ohne Javafx, AWT usw.? Java Basics - Anfänger-Themen 34
H Best Practice JavaFX TableView mit Zell-Rahmen anstelle von Zeilen-Balken Java Basics - Anfänger-Themen 1
M Ausgabe eines Arrays auf Label (Javafx) Java Basics - Anfänger-Themen 4
K Threads Multithread in JavaFx Java Basics - Anfänger-Themen 11
R Threads in JavaFX Java Basics - Anfänger-Themen 3
N JavaFX - (Controller) - Klasse verkleinern Java Basics - Anfänger-Themen 8
U JavaFX eine Vbox Instanz pro Pane? Java Basics - Anfänger-Themen 2
Spencer Reid JavaDoc zu JavaFx hinzufügen Java Basics - Anfänger-Themen 1
V wie kann man am einfachsten für ein Element der JavaFX die Umrandung aktiwieren ? auch ohne css ? Java Basics - Anfänger-Themen 4
D OOP JavaFX objektorientiert Java Basics - Anfänger-Themen 2
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
P JavaFX Textfelder geben immer null zurück Java Basics - Anfänger-Themen 8
P JavaFX TextArea.setText Java Basics - Anfänger-Themen 13
F javafx.fxml.LoadException: Root hasn't been set. Java Basics - Anfänger-Themen 0
J JavaFX aus Java-Application heraus starten Java Basics - Anfänger-Themen 7
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
D Javafx XYChart Variable in Schleife erzeugen? Java Basics - Anfänger-Themen 18
E JavaFX und Java auf Kommandozeile compilen Java Basics - Anfänger-Themen 2
J Webanwendung JavaFX Java Basics - Anfänger-Themen 4
Povlsen84 [javafx] Zusammenarbeit mit Tomcat Java Basics - Anfänger-Themen 4
D Komponenten, Module, Begrifferklärung Java Basics - Anfänger-Themen 4
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
danieldemetry Java - Graph Komponenten - Ausgabe Java Basics - Anfänger-Themen 0
C Einbinden von Komponenten mit Maven Java Basics - Anfänger-Themen 3
V Alle Komponenten eines JPanels Java Basics - Anfänger-Themen 14
T Optionale Komponenten Java Basics - Anfänger-Themen 8
M GUI- mehrere Komponenten auf Container adden Java Basics - Anfänger-Themen 2
J Klassen Hilfe bei unbekannten Zeilen bzgl. Klassen / Komponenten Java Basics - Anfänger-Themen 12
I komponenten werden in JFrame nicht richtig angezeigt Java Basics - Anfänger-Themen 1
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
D JFrame, Komponenten verschmiert. Java Basics - Anfänger-Themen 15
N JTable - Zellfarben ändern, GUI-Komponenten in Zellen einfügen Java Basics - Anfänger-Themen 5
M Komponenten irgendwo versteckt? Java Basics - Anfänger-Themen 7
O swing komponenten werden nicht angezeigt Java Basics - Anfänger-Themen 6
MU5T4NG Komponenten in Schleife ansprechen Java Basics - Anfänger-Themen 13
B Tabelle, Größe der Komponenten Java Basics - Anfänger-Themen 2
D Wie genau kann ich in Java Komponenten entwickeln? Java Basics - Anfänger-Themen 6
P Scrollpane mit dynamisch erzeugten Komponenten Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben