Veröffentlicht 16. November 200420 j Hi, Ich habe ein Problem, was ich einfach nicht bewältigt bekomme. Also ich habe ein Fenster. Auf dem liegt erstmal ein Panel und darauf dann weitere 3 Panels. So nun habe ich mit dem GridBagLayout alles schön sortiert gehabt und so habe oben 2 Panels nebeneinander und unten ein großes, wo ein JTextAreaPanel druffliegt. So nun möchte ich, dass wenn der USer das Fenster nach unten zieht, sich nur unten das Panel weiter bewegt und nicht auch noch das Panel oben, da oben nur eine Anmeldemaske liegt. Wäre nett wenn ihr mir helfen könntet =)
16. November 200420 j Da musst Du in den GridBagConstraints die Variable fill auf VERTICAL setzen (oder HORIZONTAL, die verwechsel ich immer ) Peter
16. November 200420 j das meinte ich ja nicht.Das wäre ja nur dazu da, dass sie vertikal oder horizontal ausgerichtet werden sollen. ich möchte ja aber, dass man unten am panel zieht, der größer wird, aber das darüberliegende panel nicht davon beeinflusst wird.
16. November 200420 j Warum löst du es dann nicht mit einem BorderLayout, wo deine AnmeldeMaske NORTH ist und dein JTextAreaPanel CENTER?
16. November 200420 j Sorry - dann hab ich keine Ahnung! Aber kannst ja die Lösung mal posten falls du was findest! Ich schau mich auch mal um!
16. November 200420 j In der API-Doc steht zu fill: This field is used when the component's display area is larger than the component's requested size. Und da les ich raus, dass, wenn Du Deine Komponente grösser baust (ziehst) als Dein Inhalt braucht, dass dann der Inhalt mit vergrössert wird. Und das ist es, was Du willst. Das in Verbindung mit weightx und weighty (wie soll überschüssiger Platz verteilt werden) sind Deine Freunde. Peter
24. November 200420 j ich will eben nicht, dass es sich mit vergrößert. Oben soll ja alles starr bleiben!
24. November 200420 j So nun möchte ich, dass wenn der USer das Fenster nach unten zieht, sich nur unten das Panel weiter bewegt und nicht auch noch das Panel oben, da oben nur eine Anmeldemaske liegt. ich will eben nicht, dass es sich mit vergrößert. Oben soll ja alles starr bleiben! Also was jetzt? Die beiden oberen sollen starr bleiben, das untere sich vergrössern? Alle drei sollen starr bleiben? Erklär mal genauer, was Du willst. Peter
24. November 200420 j Servus, ich habe Dir jetzt mal einen BeispielFrame gebaut, in dem drei JPanels liegen, die mit GridBagLayout gelayoutet werden. Spiel doch mal mit den Groessen weightx und weighty, anchor und fill. Beschrieben steht das in http://www.javabuch.de oder in der API-Dok. Ich kann mit diesen drei Panels machen, was ich will. Es funktioniert. Ansonsten wirst Du Dich wirklich noch ein wenig genauer erklären müssen. import java.awt.*; import javax.swing.*; public class LayoutTest { public static void main(String[] args) { JFrame frame = new JFrame("LayoutTest"); GridBagLayout layout = new GridBagLayout(); GridBagConstraints constraints; JPanel panelOne = new JPanel(); JPanel panelTwo = new JPanel(); JPanel panelThree = new JPanel(); panelOne.setBackground(Color.RED); panelTwo.setBackground(Color.BLUE); panelThree.setBackground(Color.YELLOW); constraints = new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 200, 100); layout.setConstraints(panelOne, constraints); constraints = new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.VERTICAL, new Insets(2, 2, 2, 2), 200, 100); layout.setConstraints(panelTwo, constraints); constraints = new GridBagConstraints(0, 2, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 200, 100); layout.setConstraints(panelThree, constraints); frame.getContentPane().add(panelOne); frame.getContentPane().add(panelTwo); frame.getContentPane().add(panelThree); frame.getContentPane().setLayout(layout); frame.pack(); frame.show(); } }[/PHP] [EDIT]Ja, ich weiss, der Code ist hässlich. Aber er läuft und war schnell geschrieben. [/EDIT] Peter
29. November 200420 j Bin echt froh, diese Seite gefunden zu haben. Erstmal vielen Dank für deine Bemühungen, wollte gerade den Code kompilieren, aber dabei is mir Ultra Edit flöten gegangen. Naja, ich probiere ihn dann mal morgen aus. Also nochmal zur Beschreibung. +---------------+--------------------+ | | | |Panel 1 | Panel 2 | +---------------+--------------------+ | Panel 3 | | | +------------------------------------+ Also so sieht das Ding aus. Nun möchte ich das die Panels 1 und 2 fixiert bleiben und man nur das Panel 3 nach unten ziehen kann. Verstehst du was ich meine? Wenn ich unten an dem Rand ziehe, soll nicht das Panel 1 u8nd 2 größer werden, sondern ne feste Größe haben. Muss mal gucken, ob du das in deinem Prog drinnen hast. Danke schonmal für die Mühen die du dir gemacht hast und vll. noch machst =) Mit freundlichen Grüßen Benjamin Aul
29. November 200420 j So, dann zum Endspurt, Ich habe jetzt den Code soweit abgeändert, das die oberen Panels nebeneinander liegen und nur in die Breite wachsen dürfen. Sollen Sie das auch nicht, dann nimm Ihnen einfach weightx oder setze fill auf GridBagConstraints.NONE. Hier mal der Code: import java.awt.*; import javax.swing.*; public class LayoutTest { public static void main(String[] args) { JFrame frame = new JFrame("LayoutTest"); GridBagLayout layout = new GridBagLayout(); GridBagConstraints constraints; JPanel panelOne = new JPanel(); JPanel panelTwo = new JPanel(); JPanel panelThree = new JPanel(); panelOne.setBackground(Color.RED); panelTwo.setBackground(Color.BLUE); panelThree.setBackground(Color.YELLOW); constraints = new GridBagConstraints(0, 0, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 200, 100); layout.setConstraints(panelOne, constraints); constraints = new GridBagConstraints(1, 0, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 200, 100); layout.setConstraints(panelTwo, constraints); constraints = new GridBagConstraints(0, 1, 2, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 200, 100); layout.setConstraints(panelThree, constraints); frame.getContentPane().add(panelOne); frame.getContentPane().add(panelTwo); frame.getContentPane().add(panelThree); frame.getContentPane().setLayout(layout); frame.pack(); frame.show(); } }[/PHP] Peter
30. November 200420 j genau so wollte ich das haben=) Vielen Dank Muss mir den Code jetzt mal explizit angucken, damit cih auch sehe wie ich das jetzt bei mir noch rein machen kann. thx =)
30. November 200420 j Der einzige interessante Teil dürfte der Aufruf der drei Konstruktoren von GridBagConstraints sein. Die weist Du jeweils mit der Component dem GridBagLayout zu und gut. Peter
1. Dezember 200420 j Ja, habe mir den Code angeguckt =) Naja, werde es jetzt so ähnlich in mein Programm bauen (irgendwo zwischen die 1000 Zeilen ) Muss auch noch andere Sachen einfügen. Also nochmal vielen Dank =)
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.