2017-11-13 1 views
0

Ich entwickle ein Spiel in Java Swing. Ich verwende absolute Coords und eine feste Fenstergröße, um jedes Element an seine Stelle zu setzen. Aber wenn ich den JFrame skaliere, skalieren die gezeichneten Elemente nicht. Wie kann ich das erreichen? In meinem Beispiel würde ich die Standardfenstergröße auf 1280 x 720 einstellen und das Spiel entsprechend dieser Größe entwickeln. Dann wäre es perfekt, wenn java die Größe der Elemente automatisch ändert.Java Swing Ändern der Größe von JFrame und JPanel mit allen gezeichneten Elementen

+1

"Ich benutze absolut coords" - nicht. Verwende [Layout Manager] (https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html) – c0der

+1

* "Ich benutze absolute Coords und eine feste Fenstergröße, um jedes Element an seine Stelle zu setzen. Aber wenn ich die Größe des JFrames ändere, skalieren die gezeichneten Elemente nicht "* - Ja, genau das machen Layout-Manager für Sie, aber wenn Sie das Rad neu erfinden wollen, müssen Sie es manuell machen Sie selbst und entwickeln Sie eigene Ideen über die Beziehung zwischen Komponenten und wie sie auf Änderungen in der Größe des Containers reagieren, wie Raum übrig bleibt und was zu tun ist, wenn der verfügbare Platz zu klein für die Komponenten – MadProgrammer

+1

ist Oder Sie könnte die API verwenden, die entwickelt wurde, um die meisten dieser Probleme für Sie zu lösen. Pixel perfekte Layouts sind eine Illusion, zu viele Dinge brechen sie; verschiedene Schriftmetriken; DPI; Bildschirmauflösungen; Videotreiber; Zeit, über sie hinwegzukommen. Konzentrieren Sie sich stattdessen auf den Benutzerfluss und die Interaktion – MadProgrammer

Antwort

-1

Wenn Sie ein Fenster mit fester Größe wünschen, können Sie die JFrame.setResizable (boolean) API verwenden, um Ihr Fenster in der Größe veränderbar zu machen. Beispiel:

public class FixedSizeJFrame 
{ 
    public static void main(String[] args) 
    { 
    JFrame frame = new JFrame("My Title"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setBounds(100, 100, 1280, 720); 
    frame.getContentPane().add(new JLabel("My Label"), BorderLayout.NORTH); 
    frame.getContentPane().add(new JTextArea("Sample text"), BorderLayout.CENTER); 
    frame.setResizable(false); 
    frame.setVisible(true); 
    } 
} 
+1

Als Benutzer möchte ich nur darauf hinweisen, wie sehr ich nicht veränderbare Fenster hasse - Ihr Code berücksichtigt auch nicht die möglichen Unterschiede in den Schriftmetriken. DPI; Bildschirmauflösungen, auf denen der Code möglicherweise ausgeführt werden muss, was die Wahrscheinlichkeit der Benutzerakzeptanz und Benutzerfreundlichkeit weiter verringert – MadProgrammer

+0

True. Aber ich wollte nur demonstrieren, wie setResizable() verwendet wird. –