Swing Ausnutzung von vorhandenem Platz

Razzi2007

Mitglied
Huhu.

Ich arbeite gerade an einer kleinen Swingkomponente, die wie folgt aufgebaut ist:

JFrame - darin wiederum ist ein JTabbedPane mit 3 Tabs - in denen wiederum ist jeweils eine GUI-Komponente, die von JPanel erbt.

Mein Problem ist jetzt folgendes: Wie bekomme ich es hin, dass der Inhalt der entsprechenden Tabs automatisch den ganzen vorhandenen Platz innerhalb des JFrame (1200x800 Pixel) einnimmt, ohne eine fixe Pixelzahl der einzelnen Tabinhalte angeben zu müssen?

Danke im voraus für jede Form der Hilfe und einen guten Wochstart.
 

Michael...

Top Contributor
Zur Gestaltung von Userinterfaces werden LayoutManager verwendet, damit kann man auch die Verteiltung der Oberfläche regeln. Standardlayouts sind BorderLayout, FlowLayout, GridLayout, GridBagLayout, CardLayout, BoxLayout
 

Razzi2007

Mitglied
Ich weiß schon was Layouts sind, aber wie kann ich einem Layout sagen, dass die Komponente, auf die es angewendet wird, automatisch den gesamten (pixeltechnischen) Platz der Komponente, in der sie abgelegt wurde, einnehmen soll?
 

Michael...

Top Contributor
Ich weiß schon was Layouts sind, aber wie kann ich einem Layout sagen, dass die Komponente, auf die es angewendet wird, automatisch den gesamten (pixeltechnischen) Platz der Komponente, in der sie abgelegt wurde, einnehmen soll?
Das hängt vom verwendeten LayoutManager ab und ist nicht mit jedem möglich. Beim BorderLayout z.B. wird die Komponente im Zentrum auf den gesamten verfügbaren (also den nicht von den Aussenkompenten benutzten) Bereich ausgedehnt.

Eine Übersicht und Erläuterung gibt's z.B. hier:
JavaInsel LayoutManager
 

Razzi2007

Mitglied
Ja, aber beim BorderLayout hat man selbst beim Verzicht auf alle Bereiche außer dem Center immer noch ein paar Pixel, die quasi reserviert sind, was nicht gerade toll aussieht.
 

Network

Top Contributor
Du kannst selbstverständlich, wenn dir nicht gefällt was die LayoutManager machen, die ganze Sache selbst in die Hand nehmen.

Indem du mit
Java:
jframe.setLayout( null );
Den Standard-LayoutManager deaktivierst.

Und dann kannst du mit
Java:
jpanel.setBounds( 0, 0, 1180, 780 );
die Position und Größe deines gewünschten Objekts selbst bestimmen.
 

Michael...

Top Contributor
Ja, aber beim BorderLayout hat man selbst beim Verzicht auf alle Bereiche außer dem Center immer noch ein paar Pixel, die quasi reserviert sind, was nicht gerade toll aussieht.
Kann ich jetzt nicht bestätigen. Bei folgendem Code sehe ich bei mir nur Rot:
Java:
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
JFrame frame = new JFrame();
frame.getContentPane().add(panel);
frame.setBounds(0, 0, 300, 300);
frame.setVisible(true);
 

Razzi2007

Mitglied
Ok funktioniert jetzt schonmal so weit. Danke!
Aber jetzt hätte ich gleich noch eine Frage, die direkt an die erste anschließt:

Innerhalb meiner Anwendung mit fester Pixelgröße ist unter dem zweiten Tab jetzt eine Komponente, die den ganzen Platz auch einnimmt (durch Backgorundcolor yellow sieht man das gut).

ABER: In dieser ist jetzt weiderum ein GridBagLayout drin. Dessen Inhalte (bisher 7 Label und 4 Textfields, werden aber immer genau in der Mite des vorhandenen Platzes angezeigt.

Was muss ich dem Layout angeben, damit es von Links oben an anfängt seinen Inhalt aufzubauen? (Freiraum unten ist ok, außen herum in jede Richtung aber nicht.)
 

L-ectron-X

Gesperrter Benutzer
Das "NullLayout" sollte vermieden werden. Es ist nicht kompatibel mit den Grafik-Umgebungen der jeweils anderen Betriebssysetme. Was bei dir funktioniert und gut aussieht, kann auf einem anderen Betriebssystem "unterirdisch" aussehen.
Hinzu kommt, dass du dir damit dir Flexibilität nimmst. Verändere mal die Größe des Fensters, kannst du dann noch alle Elemente der GUI benutzen? Sieht es dann noch gut aus?
Wenn du jetzt sagst: "Na und, ich habe das Fenster so eingestellt, dass man es in der Größe nicht verändern kann." Da muss ich dir sagen: Lies noch mal von oben.

Ohne das Wissen um LayoutManager wirst du niemals eine ansprechende flexible GUI erzeugen können, die in anderen Betriebssystemen und Grafik-Umgebungen noch funktioniert.
 

Razzi2007

Mitglied
Das "NullLayout" sollte vermieden werden. Es ist nicht kompatibel mit den Grafik-Umgebungen der jeweils anderen Betriebssysetme. Was bei dir funktioniert und gut aussieht, kann auf einem anderen Betriebssystem "unterirdisch" aussehen.
Hinzu kommt, dass du dir damit dir Flexibilität nimmst. Verändere mal die Größe des Fensters, kannst du dann noch alle Elemente der GUI benutzen? Sieht es dann noch gut aus?
Wenn du jetzt sagst: "Na und, ich habe das Fenster so eingestellt, dass man es in der Größe nicht verändern kann." Da muss ich dir sagen: Lies noch mal von oben.

Ohne das Wissen um LayoutManager wirst du niemals eine ansprechende flexible GUI erzeugen können, die in anderen Betriebssystemen und Grafik-Umgebungen noch funktioniert.

Ich habe doch ausdrücklich gesagt, dass ich ein GridBagLayout verwende und kein NullLayout. o_O


Vielleicht versteht man es besser, wenn ich nen Screenshot von reinstelle:

gridbag.jpg


Der gelbe Bereich hat ein GridBagLayout und KEIN NullLayout. Ich würde es nur gerne hinbekommen, dass er links oben anfängt und nicht in der Mitte. ;-)
 
Zuletzt bearbeitet:

Razzi2007

Mitglied
Das mit dem Gelb war nur zu Testzwecken, um den Bereich, der vom Tabinhalt eingenommen wird, deutlicher zu sehen. ;-)

Habe jetzt mal mit Anchor = GridBagConstraints.FIRST_LINE_START versucht, aber das hat nichts gebracht. Mit weightx und weighty bekom,me ich zwar die Position entsprechend hin, aber dann "zerrt" er die Komponenten über das komplette Fenster bzw. lässt halt zwischen allen riesen Abstände, obwohl ich Insets bei nur 5 Pixeln habe.


Aber soweit schonmal danke und sry für das Missverständniss.
 

Network

Top Contributor
Das "NullLayout" sollte vermieden werden. Es ist nicht kompatibel mit den Grafik-Umgebungen der jeweils anderen Betriebssysetme. Was bei dir funktioniert und gut aussieht, kann auf einem anderen Betriebssystem "unterirdisch" aussehen.
Hinzu kommt, dass du dir damit dir Flexibilität nimmst. Verändere mal die Größe des Fensters, kannst du dann noch alle Elemente der GUI benutzen? Sieht es dann noch gut aus?
Wenn du jetzt sagst: "Na und, ich habe das Fenster so eingestellt, dass man es in der Größe nicht verändern kann." Da muss ich dir sagen: Lies noch mal von oben.

Ohne das Wissen um LayoutManager wirst du niemals eine ansprechende flexible GUI erzeugen können, die in anderen Betriebssystemen und Grafik-Umgebungen noch funktioniert.

Auf anderen Betriebssystemen hab ich sowas noch nicht gesehen, aber ich kenn auch niemanden, der was anderes ausser Windows benutzt... unterirdisch?

Aber Programme sehen total "verstört" aus, wenn sie verkleinert werden. Eine Lösung mit ScrollPane sieht da wiederum um einiges besser aus. Aber ich denke, dass ist eine Entscheidung des späteren Verwendungszweckes mit dem Programm.

Aber ich glaube das gehört garnicht mehr zum Thema, die Fragestellung hat sich ja bereits geändert, und das hier ist jetzt eine Sub-Kommunikation.

@Razzi
Du sagst "GridBagLayout". Schonmal versucht, die einzelnen "Räume" Manuell die größe zu setzen?
Damit meine ich nicht die weiteren Einstellungen die du bereits vorgenommen hast. Sondern wirklich die bestimmte Box an deine Wünsche anzupassen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R JList einem vorhandenem JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
J Schriftgröße aus vorhandenem Platz berechnen AWT, Swing, JavaFX & SWT 9
TheWhiteShadow JavaFX ScrollPane nimmt nicht genug platz ein AWT, Swing, JavaFX & SWT 3
L JavaFX Anderer Text, wenn kein Platz ist. AWT, Swing, JavaFX & SWT 1
R Swing JPanels auf JFrame auf verfügbaren Platz aufblasen AWT, Swing, JavaFX & SWT 4
GenerationLost Bilder an bestimmten Platz einfügen/Objekte visualisieren AWT, Swing, JavaFX & SWT 1
Kenan89 Border nimmt Platz AWT, Swing, JavaFX & SWT 17
I Swing JLabel - Platz schaffen AWT, Swing, JavaFX & SWT 10
L LayoutManager Componenten über verfügbaren Platz strecken AWT, Swing, JavaFX & SWT 7
F LayoutManager GridBagLayout nutzt Platz nicht AWT, Swing, JavaFX & SWT 2
T Layoutmanager der vorhanden Platz beruecksichtigt? AWT, Swing, JavaFX & SWT 5
T paintComponent() überschreiben: Platz für Border freihalten? AWT, Swing, JavaFX & SWT 6
T GridLayout, zu wenig Platz zwischen Widgets AWT, Swing, JavaFX & SWT 3
R das letzte JLabel in der Schleife will nicht an seinen Platz AWT, Swing, JavaFX & SWT 2
F Benötigter Platz von Komponenten AWT, Swing, JavaFX & SWT 3
K JFreeChart: Platz zwischen Balken AWT, Swing, JavaFX & SWT 3
M zur Verfügung stehenden Platz ausfüllen AWT, Swing, JavaFX & SWT 5
Z bei kleinen Buttons verschwindet Schrift, obwohl Platz wäre AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben