Ich habe einen nicht skalierbaren Jframe der Größe 1280x800. Natürlich erscheint diese Größe je nach Auflösung des Bildschirms größer und kleiner. (Es hat ein Hintergrundbild). Nun, wenn ich das versuche, sagen wir ein 4k-Monitor, wäre es absolut unpraktisch, weil zu klein. Gibt es keine Möglichkeit, den JFrame zu skalieren? Oder eine Lösung für dieses Problem? Was ich dachte, wäre, dass ich größere jFrames schreibe und der Hauptklasse erzähle, welche man entsprechend der Auflösung öffnen soll. Ich bin mir sicher, dass es einen viel eleganteren Weg dafür gibt, da ich denke, dass es ein Problem ist, auf das viele gestoßen wären! Was für ein Albtraum! Bitte hilf mir! DankeJFrame-Skalierung für hochauflösende Bildschirme
Antwort
Eine Möglichkeit, indem man die Bildschirmgröße des Geräts erreichen könnte das heißt, und dann die Größe Ihrer JFrame Einstellung entsprechend:
Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
double jFrameWidth = screenDimension.width * 0.7;
double jFrameHeight = screenDimension.height * 0.5;
Oder wenn Sie wollen einfach nur die JFrame Sie maximieren kann verwenden:
jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
ja, dass du, aber du siehst, das macht den Rahmen der richtigen Größe, aber nicht was drin ist. Und so würde mein Hintergrundbild nie richtig passen –
@MarcoEdoardoPalma Sie sollten den Inhalt Ihres JFrame mit Layout-Managern und nicht fixierten Größen schreiben, so dass sie auf die Größe des JFrame skaliert werden. – explv
Erkennen Sie die Auflösung des Fensters, auf dem Sie starten, und skalieren Sie den Rahmen auf einen Prozentsatz dieses Fensters. Haben Sie eine Baseline-Dimension (1280 * 800), so dass es auf kleineren Bildschirmen nicht zu sehr gequetscht wird.
Als Beispiel ziehe ich die lokale GraphicsEnvironment
, ziehe ich die Daten von jeder relevanten GraphicsDevice
in eine Datenklasse, die ich selbst geschrieben habe, und ich verwende das während meines Projekts, da es mir alle möglichen Sachen wie Pufferstrategien, Fenster gibt Dimensionen und so weiter. Ich mache das, wenn die Anwendung geladen wird (unter Verwendung eines SplashScreen
), was mir die Kontrolle über den gesamten Prozess ermöglicht.
Das ist ungefähr so elegant, wie Sie bekommen können, denke ich.
EDIT
Schnitt in einigen Beispiel Pseudo-Code eine Vorstellung davon zu geben, was ich hinaus will. Ich schreibe in erster Linie in Java, aber ich mache das nicht in einer IDE, damit es nicht unbedingt sein kompilieren-ready:
public void scaleWindowDimensions(JFrame frame, GraphicsDevice gd) {
Rectangle bounds = gd.getDefaultConfiguration().getBounds();
int screenX = (int) bounds.getWidth();
int screenY = (int) bounds.getHeight();
// substitute this for however you're setting the size of the JFrame; this is simply how I sometimes do it
frame.getContentPane().setPreferredSize(new Dimension(screenX, screenY));
}
Dies ist ein sehr schnelles Beispiel, dass die Größe Ihrer JFrame zu, dass festgelegt wird von dem Monitor, auf dem es läuft. Sie müssen das verwendete Hintergrundbild ebenfalls ändern. Du kannst viel mehr damit machen, aber ich halte es absichtlich einfach.
wow das scheint das zu sein was ich gesucht habe, aber wie skalierst du es? Vielen Dank! –
Sie müssen entscheiden, auf welcher Bildschirmgröße Ihr 'JFrame' am besten funktioniert. Sie skalieren den JFrame dann auf Bildschirmgrößen, die größer sind, und auf Bildschirmgrößen, die kleiner sind (solange Sie nicht die Mindestgröße erreichen). Sie können Ihr Hintergrundbild auf die gleiche Weise skalieren. – Gorbles
Könnten Sie mir bitte eine Kodierungsreferenz geben? –
Siehe auch dieses [Fallbeispiel] (http://stackoverflow.com/a/12532237/230513) von nicht veränderbaren Containern. – trashgod