Java, wie zu machen JFrames maximiert, aber nicht in der Größe angepasst
Ursprünglich (Siehe meine Vorherige Frage "Java, wie zu machen JFrames beginnen als ein vergrößertes Fenster") ich wollte ein Fenster, das beginnt maximiert.
Dieser code bewerkstelligt:
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
}
Allerdings, wenn das Fenster wieder nach unten es wird eine praktisch nicht existent-bar. Um dieses Problem zu lösen ich die Größe des Fensters mit setSize(). Dies funktioniert, zeigt jedoch ein anderes problem, das Fenster kann immer noch geändert werden.
Dieses problem zu lösen, ich setResizable(false); und das ist mein code bisher:
public static void main(String[] args) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
JFrame frame = new JFrame("Jedia");
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setSize(screenSize);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
Jedoch jetzt das Fenster beginnt bei der angegebenen Größe (anstatt maximiert) und können nicht wiederhergestellt werden.
So, meine Frage ist, wie kann ich entweder das Fenster start maximiert werden, geben Sie Größe, wenn Sie wiederhergestellt wird nach unten und machen ändern der Größe unmöglich? Oder machen ein Fenster, das beginnt maximiert und kann nicht wiederhergestellt werden, nach unten?
InformationsquelleAutor Jack O'Connor | 2013-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine einfache Lösung, die funktioniert fast die ganze Zeit: dein frame nicht in der Größe angepasst nach Setzung sichtbar. So ändert lediglich Ihren code so:
Diese Weise wird der Rahmen start maximiert und die maximieren-Schaltfläche wird ausgegraut, verhindern, dass Benutzer, es zu benutzen. (Ich weiß wirklich nicht, warum Sie haben, dies zu tun. Ich nehme an, dass die maximierten Zustand ist wirklich nur angewendet, wenn das Fenster sichtbar wird, und wenn Sie es machen unresizable vor, es gilt nicht.)
Funktioniert es fast die ganze Zeit da auf Windows 7 zumindest können Sie das Fenster geht aus dem maximierten Zustand, indem Sie auf die Titelleiste und ziehen es. Aber es wird an der Größe, die Sie gesetzt haben, es früher. Problem ist, dass Ihre Benutzer nicht in der Lage, zu maximieren, es wieder, und ich habe nicht den Weg gefunden, mit den Zuhörern, um das Fenster wieder zu maximierten Zustand. ( Bearbeiten: @David Kroukamp zeigt im letzten Teil seiner Antwort, dass es möglich ist, Kraft der maximierten Zustand durch einen ComponentListener. Daher müssen Sie nicht verwenden
setResizable(false)
Diese Weise können Sie immer noch ein problem mit Windows 7, weil die Drag Aktion wird nicht aufgefangen von dieser Veranstaltung aus welchem Grund auch immer, aber die Benutzer werden in der Lage sein zu verwenden, maximiert die Taste, um es wieder setzen, wo es sein sollte.)Jetzt, es gibt fast nie einen Grund, das zu tun diese Art von Dingen. Nutzer mögen es nicht, wenn Sie verhindern, dass Sie zu manipulieren, Ihre windows (maximierte Fenster können nicht verschoben werden, zum Beispiel, und das kann lästig sein, wenn Sie mehrere Bildschirme). Eine Ausnahme ist wenn Sie ein Spiel, das in der Regel voll-Bildschirm. Aber dann würden Sie nicht möchten, dass ein JFrame, weil Sie nicht wollen, dass alle die Dekoration, sondern ein Fenster.
Wenn Ihr problem ist, dass die Standard-Fenstergröße ist sehr klein, es ist normal. Sie haben etwas in Ihrem Rahmen zuerst (einige Steuerelemente, Schaltflächen, was Sie wollen in Ihrer Anwendung), verwenden von layouts (das ist wichtig), dann rufen Sie die Methode
pack()
auf den Rahmen. Es wird gewählt, eine schöne Standard-Größe für Ihre Fenster.Schließlich, ein letztes Wort. Ich habe meinen Beispiel-code in eine
main
Methode als Abkürzung, aber man sollte immer das tun, Swing-Zeug in die Swing-EDT mithilfeSwingUtils.invokeLater()
.InformationsquelleAutor Cyrille Ka
Manchmal, Sie müssen vorsichtig sein, über die Reihenfolge, die Sie festlegen JFrame Parameter.
Auch, Sie werden sollte, mit Swing-Komponenten auf dem event dispatch thread.
Versuchen, diese und sehen, ob es hilft.
InformationsquelleAutor Gilbert Le Blanc
Welcher Umgebung laufen Sie auf? Ich habe versucht, diese mit JDK1.6 /JDK1.7 unter Win7 und es funktioniert wie erwartet (Fenster startet maximiert, minimiert in die Taskleiste).
InformationsquelleAutor pmorken
Habe ich eine Art hack für Sie, die funktionieren könnte.
Versuchen Sie, diesen code (es funktionierte für mich):
e.paramString()
gibt einen String zurück, der aussieht wie "COMPONENT_RESIZED (-8,-8, [Auflösung])" wenn eine restore-Aktion stattfindet.InformationsquelleAutor Elist