2017-02-02 3 views
-2

Ich mache ein Programm in Java wo ich einige JPanels mit verschiedenen Layouts habe und ich möchte zwischen ihnen wechseln. Auf diesen JPanels habe ich andere JPanels mit anderen Komponenten (wie JButtons und JLabels) und möchte sie in Abhängigkeit von der JFrame-Größe skalieren (z. B. JPanel auf JPanel mit einer Höhe, die halb so groß ist wie der Inhaltsbereich von JFrame).Java - Wechsel zwischen JPanels mit ihren eigenen JPanels und Größenanpassung dieser inneren JPanels und Komponenten je nach JFrame Größe

Ich habe versucht, diese JPanels zu machen und sie direkt zu entfernen oder zu JFrame hinzufügen und dann packen, neu validieren und neu streichen JFrame aber manchmal JPanels nicht angezeigt, wenn ich Programm gestartet habe.

Ich habe auch versucht, mit CardLayout. Ich habe JPanels erstellt und sie zu einem Container hinzugefügt, der in JFrame hinzugefügt wurde. Die Umstellung war in Ordnung, aber ich kann JPanels und andere Komponenten in JPanels im CardLayout-Container nicht skalieren, da ich beim Versuch, Größe des Inhaltsbereichs von JFrame oder Größe des CardLayout-Containers mit JPanels zu erhalten, Breite und Höhe gleich Null erhielt.

Also, gibt es einen Weg, dies zu erreichen?

Es tut mir leid, wenn ich es unverständlich geschrieben habe. Eigentlich möchte ich ein Spiel mit verschiedenen Szenen machen und wenn du auf eine Schaltfläche klickst, wechselt es zu einer anderen Szene mit verschiedenen Komponenten (JPanels, JButtons, Bilder ...). Vielleicht kann ich ein Haupt-JPanel in JFrame verwenden und dann sein Layout ändern und je nach Szene Hintergrundbild, JPanels, JButtons usw. entfernen und hinzufügen, aber ich weiß nicht, ob es möglich ist und ob es keine weiteren Probleme geben wird.

Vielen Dank für jeden Hinweis.

Antwort

1

CardLayout kann seinen Container so dimensionieren, dass er der größten bevorzugten Größe einer Komponente entspricht, die hinzugefügt wurde, und das sollten Sie also verwenden. Das Problem, das Sie lösen müssen, ist die aktuelle Komponente Karte bevorzugte Größen funktionieren nicht so, wie Sie es möchten. Der häufigste Grund für dieses Vorkommen liegt in der Verwendung von Null-Layouts und absoluter Positionierung. Wenn Sie diese Option in JP6-Kartenkomponenten verwenden, tun Sie dies nicht. Außerdem müssen Sie möglicherweise getPreferredSize() auf einer fehlerhaften Kartenkomponente JPanels überschreiben, wenn Sie eine direktere Kontrolle über die bevorzugte Größe benötigen. Ich habe das oft gemacht, wenn mein JPanel ein Bild in der paintComponent-Methode anzeigt und ich möchte, dass mein JPanel groß genug ist, um dies zu tun.

Für bessere Hilfe, erstellen und veröffentlichen Sie Ihre SSCCE für Ihr Problem.

+0

Ich verwende keine absolute Positionierung, aber ich möchte nur die Größe der inneren Komponenten angeben, z. JPanel auf JPanel mit einer Höhe, die halb so groß ist wie der Inhaltsbereich von JFrame, aber ich kann die tatsächliche Größe des Frames oder seines Inhaltsbereichs nicht im Konstruktor der JPanel-Klasse erhalten, die sich im CardLayout-Container befindet. – Spook

+1

(1+) - 'JPanel auf JPanel mit einer Höhe, die halb so groß ist wie der Inhaltsbereich von JFrame' - das Panel, das Sie dem CardLayout hinzufügen, könnte also ein Panel mit einem GridLayout sein. Sie haben unseren 'SSCCE' nicht gepostet, damit wir nicht weiter helfen können. – camickr