JavaFX Pane inklusive Inhalt der Bildschirm Auflösung anpassen

Lyreex

Aktives Mitglied
Guten Tag zusammen,

ich benötige wieder eure Fachmänniche Hilfe.
Heute hätte ich eine Frage zu der JavaFX Oberfläche. Wie ich die so anpassen kann, das die GUI sich an jede Auflösung automatisch anpasst.

Zur GUI:
Die GUI ist auf Pane aufgebaut. Darin enthalten sind noch Labels, ein Bild (oben Rechts als Logo) und noch eine weiteres Pane (pane2).
In der Pane2 sind ebenfalls Labels enthalten. Mehr ist auf der GUI nicht drauf. Also nur 2x Pane, 1x Bild und ein paar Labels.
Jetzt hat die GUI eine Standardmäßige Größe von 1911x1077.
Die GUI wird immer im Fullscreen angezeigt.

Problem:
Wenn die Bildschirmauflösung kleiner ist, dann fehlt die Hälfte von der Oberfläche.

Ich hab hier im Forum schon gesehen das bereits andere ein ähnliches Problem hatten.
Ein Lösungsansatz war es mit einer GridPane zu lösen, was bei mir leider nicht funktioniert hat.
Da die Labels während des Programmablaufs gefüllt werden und ich nicht genau sagen kann wie viel da rein kommt. Bei dem GridPane haben die sich dann nach oben aufgefüllt und sind teilweise auch überlappt. Entweder war ich zu doof dafür das richtig zu machen oder es passt halt wirklich nicht für meinen Anwendungszweck.

Mein Lösungsansatz:
Jetzt hab ich aber schon eine Idee wie man das ganze lösen könnte. Dazu würd ich aber gerne eure Meinung hören, ob das überhaupt Sinn macht.
Ich weiß ja das die optimale Auflösung 1911x1077 ist und das das Bild oben rechts in dem Fall Position x = 1218 und y = 72 hat.
Wenn ich jetzt eine Auflösung von z.B. 1366x768 habe könnte ich doch theoretisch die Position von dem Bild oben rechst neu ermitteln oder?
Dazu würd ich folgende Rechnung machen:

Beispiel für das Bild oben rechts auf der GUI:

Optimale Bildschirmauflösung - aktuelle Bildschirmauflösung = Positionsverschiebung
1911 - 1366 = 545


Aktuelle X Position von Image - Positionsverschiebung = neue X Position von Image
1218 - 545 = 671


Die neue errechnte X Positon würde ich dann am Anfang des Programmstartes setzen und das dann für alle Objekte auf der GUI durchziehen. Für jedes dann die entsprechende Rechnung ausführen. Die aktuelle Bildschirmauflösung bekomme ich über die Scene heraus, da diese immer im Vollbild Modus gestartet werden soll.


Wenn jemand eine smartere Lösung hat, würde ich mich freuen, wenn er diese mit mir teilt. :)
 

mrBrown

Super-Moderator
Mitarbeiter
Generell ist es am sinnvollsten, auf absolute Positionsangaben zu verzichten, und stattdessen passende Layouts zu nutzen.
Welches da passt, hängt immer sehr vom spezifischen Fall ab.

Gridpane kann durchaus passend sein, was genau da das Problem war, hab ich nicht ganz verstanden. Wurden die Labels zu groß, um in die einzelnen "Zellen" zu passen?
 

mihe7

Top Contributor
Wie ich die so anpassen kann, das die GUI sich an jede Auflösung automatisch anpasst.
könnte ich doch theoretisch die Position von dem Bild oben rechst neu ermitteln oder?
Genau das ist die Aufgabe eines Layouts (layout panes/layout container bzw. "LayoutManager" unter AWT/Swing).

Dazu würd ich aber gerne eure Meinung hören, ob das überhaupt Sinn macht.
In der Regel nicht.
 

Lyreex

Aktives Mitglied
Okay.

Ja genau, die haben nicht mehr in die Zelle gepasst und anstatt das die Labels den Text untereinander geschrieben haben, wurde der Text immer oben drüber angehongen. So das sich das Label von unten nach oben geschrieben hat statt von oben nach unten.
 

Lyreex

Aktives Mitglied
Ahh okay.

Das heißt ich kann das Layout im SceneBuilder so einstellen, dass es sich von alleine an die Bildschirmauflösung anpasst?
 

Lyreex

Aktives Mitglied
Ich bin da aktuell leider etwas Hilflos.
Ich hab jetzt mal die Pane gewechselt in eine AnchorPane.
Auch mal etwas mit den Einstellungen rumgespielt aber nicht auf das gewünschte Ergebnis gekommen.

Es gibt doch bestimmt eine Funktion mit der ich die Labels Prozentual auf die Oberfläche skalieren kann?
 

Lyreex

Aktives Mitglied
Ach, Du willst die Größe des Inhalts eines Labels skalieren? Das geht dann in die Richtung: https://stackoverflow.com/questions...t-truncating-text-within-it/13300657#13300657

Ich hab mich wohl etwas unglücklich ausgedrückt. Sorry.
Die Idee war das die Label Position mit der Größe der Scene skaliert.

So das die Oberfläche auf allen Bildschirmen gleich aussieht. Egal welche Auflösung diese haben.

Also wenn ich jetzt die Oberfläche auf einem Bildschirm mit einer Auflösung von 1920x1080 öffne, dann ist oben rechts das Logo.

Wenn ich jetzt die Oberfläche auf einem Bildschirm mit einer Auflösung von 1366x768 öffne, dann sieht man das Logo nicht mehr, weil die Position außerhalb der Bildschirmauflösung liegt.

Ich wollt jetzt eine Methode schreiben um die Position (und ggf. Größe aber das ist vorerst nebensache) prozentual an die Größe anzupassen.
 

mihe7

Top Contributor
Ich wollt jetzt eine Methode schreiben um die Position (und ggf. Größe aber das ist vorerst nebensache) prozentual an die Größe anzupassen.
Nochmal: genau das macht das Layout automatisch - es verteilt die Komponenten auf den zur Verfügung stehenden Platz. Wie es das macht, hängt vom gewählten Layout und dessen Einstellungen ab.

Wenn Du z. B. in einer nackten Anchorpane den Top- und Right-Anchor zu Deinem Logo mit einem Abstand von 20 bzw. 10 setzt, dann wird Dein Logo in diesem Panel mit einem Abstand von 20 nach oben und 10 nach rechts vom oberen, rechten Rand angezeigt - egal, wie groß Dein Fenster wird.

Wenn Du ein 4-spaltiges Layout haben willst, kannst Du eine GridPane verwenden und jeder Spalte z. B. 25 % Breite mitgeben.

Layouts lassen sich natürlich auch schachteln.

Java:
public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Personen");
        AnchorPane header = new AnchorPane();
        Label logo = new Label("LOGO");
        header.setTopAnchor(logo, 10.0);
        header.setRightAnchor(logo, 20.0);
        header.getChildren().add(logo);

        GridPane grid = new GridPane();
        for (int i = 0; i < 4; i++) {
            grid.add(new Button(Integer.toString(i)), i, i);
            ColumnConstraints cc = new ColumnConstraints();
            cc.setPercentWidth(25.0);
            grid.getColumnConstraints().add(cc);
        }

        BorderPane content = new BorderPane();
        content.setTop(header);
        content.setCenter(grid);

        Scene scene = new Scene(content, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
 

Lyreex

Aktives Mitglied
Nochmal: genau das macht das Layout automatisch - es verteilt die Komponenten auf den zur Verfügung stehenden Platz. Wie es das macht, hängt vom gewählten Layout und dessen Einstellungen ab.

Wenn Du z. B. in einer nackten Anchorpane den Top- und Right-Anchor zu Deinem Logo mit einem Abstand von 20 bzw. 10 setzt, dann wird Dein Logo in diesem Panel mit einem Abstand von 20 nach oben und 10 nach rechts vom oberen, rechten Rand angezeigt - egal, wie groß Dein Fenster wird.

Wenn Du ein 4-spaltiges Layout haben willst, kannst Du eine GridPane verwenden und jeder Spalte z. B. 25 % Breite mitgeben.

Layouts lassen sich natürlich auch schachteln.

Java:
public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Personen");
        AnchorPane header = new AnchorPane();
        Label logo = new Label("LOGO");
        header.setTopAnchor(logo, 10.0);
        header.setRightAnchor(logo, 20.0);
        header.getChildren().add(logo);

        GridPane grid = new GridPane();
        for (int i = 0; i < 4; i++) {
            grid.add(new Button(Integer.toString(i)), i, i);
            ColumnConstraints cc = new ColumnConstraints();
            cc.setPercentWidth(25.0);
            grid.getColumnConstraints().add(cc);
        }

        BorderPane content = new BorderPane();
        content.setTop(header);
        content.setCenter(grid);

        Scene scene = new Scene(content, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}


Jaa genau das war das was ich gesucht hab. DANKE!!:)

Jetzt hab ich nur noch den kleinen Huddel, dass wenn der Text zu lange im Label ist, wird der Rest abgeschnitten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Die ganze Pane width nutzen AWT, Swing, JavaFX & SWT 1
I JavaFX - Pane wechseln über 2. Controller AWT, Swing, JavaFX & SWT 5
D JavaFX Pane per Drag&Drop bewegen? AWT, Swing, JavaFX & SWT 2
Z JavaFX Pane für wechselnde Sub-Panes mit Auto-Resize AWT, Swing, JavaFX & SWT 2
MiMa GUI Controller für Border Pane als MVC Modell AWT, Swing, JavaFX & SWT 1
J Swing Pane im SplitPane automatische Größe aktivieren AWT, Swing, JavaFX & SWT 0
K TabPane Pane Styling mit CSS AWT, Swing, JavaFX & SWT 3
M PDF einlesen und innerhalb Pane anzeigen AWT, Swing, JavaFX & SWT 5
WetWer Scroll Pane AWT, Swing, JavaFX & SWT 2
K JavaFX NullpointerEx, kann nichts zur Pane hinzufügen AWT, Swing, JavaFX & SWT 10
S JavaFX Pane Wechsel AWT, Swing, JavaFX & SWT 1
HaukeG JavaFX JavaFX Resize und DragAndDrop eines Pane AWT, Swing, JavaFX & SWT 4
M Java FX Welches Accordion Tilded Pane geöffnet? AWT, Swing, JavaFX & SWT 4
V JavaFX, Pane construktor von einer Klasse in der Main verwenden. AWT, Swing, JavaFX & SWT 4
G JavaFX Pane ändern/"austauschen" AWT, Swing, JavaFX & SWT 2
Kenan89 Vertikal und horizontal zentrierter Pane in ScrollPane AWT, Swing, JavaFX & SWT 5
M Auf Glass Pane zeichnen AWT, Swing, JavaFX & SWT 3
L JFrame/Content Pane height Problem AWT, Swing, JavaFX & SWT 4
Y Swing Bordered Pane und Jpanel AWT, Swing, JavaFX & SWT 11
G inahlt von content pane austauschen AWT, Swing, JavaFX & SWT 2
A Probleme mit JOption Pane mit FokusListener und Schaltfläche AWT, Swing, JavaFX & SWT 5
T Tabbed Pane AWT, Swing, JavaFX & SWT 3
F An eindeutigen Index eines Tabs in einer JTabbed Pane kommen AWT, Swing, JavaFX & SWT 3
A Tabbed Pane ohne Tabs? - möglich? AWT, Swing, JavaFX & SWT 4
G eigenes option pane AWT, Swing, JavaFX & SWT 5
F Maximieren, Minimieren, Schließen Button in JTabbed Pane AWT, Swing, JavaFX & SWT 2
K Mouse Events der Scrollbar/pane AWT, Swing, JavaFX & SWT 2
A Datei einlesen und Inhalt in JList (Tabbed Pane) anzeigen? AWT, Swing, JavaFX & SWT 11
P Scrollbar/Pane auch mit negativen x,y - Werten AWT, Swing, JavaFX & SWT 2
I Textbreite von Font inklusive Tabs ermitteln AWT, Swing, JavaFX & SWT 4
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
Fragerjava Frame inhalt komplett löschen AWT, Swing, JavaFX & SWT 4
_user_q Wie den Inhalt vom Spinner auf Integer überprüfen? AWT, Swing, JavaFX & SWT 15
izoards JavaFX TableView mit Array Inhalt füllen AWT, Swing, JavaFX & SWT 1
B Batik: Inhalt JComponent to SVG? AWT, Swing, JavaFX & SWT 6
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
B JavaFX TextInputDialog: Focus auf Eingabefeldinhalt setzen und nach OK Inhalt leeren AWT, Swing, JavaFX & SWT 5
H JTabel Inhalt löschen AWT, Swing, JavaFX & SWT 1
L JDialog hat manchmal keinen Inhalt AWT, Swing, JavaFX & SWT 2
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
ZH1896ZH JavaFX Wie kann ich die Fenstergrösse entsprechend dem Inhalt vergrössern/verkleinern AWT, Swing, JavaFX & SWT 2
K JavaFX Component Größe an Inhalt anpassen AWT, Swing, JavaFX & SWT 11
Hatsi09 JTextArea Inhalt verlinken AWT, Swing, JavaFX & SWT 4
L JPanel zeigt keinen Inhalt AWT, Swing, JavaFX & SWT 1
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
C JTextField Inhalt mit Maus selektieren wenn disabled AWT, Swing, JavaFX & SWT 2
C JavaFX ProGuard -> TableView kein Inhalt AWT, Swing, JavaFX & SWT 7
D Inhalt von JTextField in MySQL speichern. Wie ? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
MaxG. JavaFX Inhalt in Tableview wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
T [Neuling] Textfeld Inhalt überprüfen und falsche Stellen als msg Ausgeben AWT, Swing, JavaFX & SWT 1
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
gamillton Swing JComboBox mit extra Inhalt + breiteres Popupmenü AWT, Swing, JavaFX & SWT 0
M Swing Inhalt meines JTables wird falsch dargestellt AWT, Swing, JavaFX & SWT 8
P TreeView automatisch an große von Inhalt anpassen AWT, Swing, JavaFX & SWT 3
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
G Menübar anklicken und Inhalt entsprechend wechseln AWT, Swing, JavaFX & SWT 4
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
A JavaFX Von Klasse auf Controller Inhalt zugreifen AWT, Swing, JavaFX & SWT 9
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
Tausendsassa Frame öffnet aber zeigt keinen Inhalt... AWT, Swing, JavaFX & SWT 10
A BorderLayout "Center" Inhalt wechseln AWT, Swing, JavaFX & SWT 1
D Swing JTable mit Inhalt aus XML-File AWT, Swing, JavaFX & SWT 3
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
S Swing Nur den sichtbaren Bereich eines TextPane mit Inhalt darstellem AWT, Swing, JavaFX & SWT 0
E JavaFX JavaFX - MenuItem erstellen aus dem Inhalt einer HashMap AWT, Swing, JavaFX & SWT 1
Z JavaFX Inhalt einer ViewTable durch Aktion einer Menubar ändern welche in einer anderen fxml ist AWT, Swing, JavaFX & SWT 4
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
E JavaFX Sehr viel und unterschiedlich Großen Inhalt auf einer "Fläche" ... Umsetzbar ? AWT, Swing, JavaFX & SWT 3
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
JAVAnnik JavaFX Inhalt der TreeCell nicht einrücken AWT, Swing, JavaFX & SWT 1
F AWT Drucken verschluckt inhalt AWT, Swing, JavaFX & SWT 1
S Inhalt der Java-Konsole in die JTextArea AWT, Swing, JavaFX & SWT 3
TheJavaKid JTextField: Reine Domain herausfiltern, sonst Inhalt löschen AWT, Swing, JavaFX & SWT 1
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
OnDemand Inhalt des Frames ändern AWT, Swing, JavaFX & SWT 4
S SWT TableCell mit Composite als Inhalt / Höhe der Cell/Row AWT, Swing, JavaFX & SWT 5
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
C Swing Anzeigeproblem mit TableModels abhängig von deren Inhalt AWT, Swing, JavaFX & SWT 10
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2
I JTable Spalten automatisch dem Inhalt anpassen! AWT, Swing, JavaFX & SWT 6
P Swing Dialog zeigt keinen Inhalt in Verbindung mit JFrame AWT, Swing, JavaFX & SWT 18
0 JTable Spaltenbreite automatisch an Inhalt anpassne geht nicht AWT, Swing, JavaFX & SWT 3
M EditorPane Inhalt anders als er soll! AWT, Swing, JavaFX & SWT 2
S Swing JFormattedTextField - bei nicht korrekter Eingabe Inhalt überschreiben AWT, Swing, JavaFX & SWT 5
S Swing JFormattedTextfield markiert nicht gesamten Inhalt AWT, Swing, JavaFX & SWT 4
A 2D-Grafik Panel inhalt löschen AWT, Swing, JavaFX & SWT 5
H JCombobox inhalt löschen AWT, Swing, JavaFX & SWT 17
N Swing JCombobox - PopupMenu-Inhalt mit KSKB AWT, Swing, JavaFX & SWT 2
N Swing KomponentenHöhe an html-Inhalt anpassen AWT, Swing, JavaFX & SWT 4
S Inhalt einer JComboBox aktualisieren AWT, Swing, JavaFX & SWT 6
Nicklas2751 Table View zeigt keinen Inhalt nur leere Zeilen AWT, Swing, JavaFX & SWT 2
A JComboBox-Inhalt durch neues Array ersetzen AWT, Swing, JavaFX & SWT 2
D LayoutManager JScrollPane mit dynamischem Inhalt AWT, Swing, JavaFX & SWT 8
N Fehler Inhalt von JTable wird gelöscht AWT, Swing, JavaFX & SWT 5
C SWT Wie greife ich auf den Inhalt einer bestimmten Zeile zu? (TableViewer) AWT, Swing, JavaFX & SWT 7
H JFrame Inhalt neu aufbauen? AWT, Swing, JavaFX & SWT 8
M Beim Start von TableEditor Inhalt der Zelle markieren. AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben