LayoutManager, Anordnung von Komponenten

Hallo Leute,

ich glaube, ich brauche Eure Hilfe. Ich habe ein Problem mit dem Layoutmanager.

Ich habe folgende Komponenten (n), die ich in einem Frame plazieren (s. u.) möchte:

  • Eine TextArea (T)
  • ein Button (B)
  • ein Panel §
  • ein Canvas ©
  • ein Panel, in dem 9 Zeilen Text (Label) stehen sollen (L).

Also T, B, P, C und L.

So, und jetzt möchte ich das folgendermaßen in einem Frame anordnen:

TTTTTTPPPPB
TTTTTTPPPPB
TTTTTTLLLLLL
TTTTTTLLLLLL
TTTTTTLLLLLL
TTTTTTLLLLLL
TTTTTTCCCCC
TTTTTTCCCCC

Also ganz links über die ganze Fensterhöhe ein Textarea (T).
Oben rechts ein Panel und nochmal rechts daneben ein kleiner Button.
Mitte rechts die 9 Label.
Unten rechts ein schönes Canvas.
Zwischen den Komponenten sollte ein kleiner Abstand bleiben.

Meine Fragen:
Wie muß ich für das Frame den LayoutManager definieren?
Wie setze ich die Komponenten (add) an die richtige Stelle?

Bitte stichwortartigen Quellcode! Danke!!!

Herzliche Grüße,
Gustav Kollmeier, München

Hallo,

da gibt es verschiedene Möglichkeiten, z.B. mit GridBagLayout:
http://java.sun.com/j2se/1.4.1/docs/api/java/awt/Gri…

 GridBagLayout gbl = new GridBagLayout();
 GridBagConstraints gbc = new GridBagConstraints();

 this.getContentPane().setLayout(gbl);

 JTextArea tArea = new JTextArea(20,20);
 JButton button = new JButton("Button");
 JPanel panel = new JPanel();
 Canvas canvas = new Canvas();
 JPanel labelPanel = new JPanel();

 gbc.gridx = 0;
 gbc.gridy = 0;
 gbc.gridheight = gbc.REMAINDER;
 gbl.setConstraints(tArea,gbc);

 gbc.gridheight = 1;
 gbc.gridx = 1;
 gbl.setConstraints(panel,gbc);

 gbc.gridx = 2;
 gbl.setConstraints(button,gbc);

 gbc.gridx = 1;
 gbc.gridy = 1;
 gbc.gridwidth = 2;
 gbl.setConstraints(labelPanel,gbc);

 gbc.gridx = 1;
 gbc.gridy = 2;
 gbl.setConstraints(canvas,gbc);

 this.getContentPane().add(tArea);
 this.getContentPane().add(button);
 this.getContentPane().add(panel);
 this.getContentPane().add(canvas);
 this.getContentPane().add(labelPanel);

Falls dir das zu verwirrend ist, du kannst auch Panels beliebig verschachteln, also z.B. oberes Panel + Button in ein eigenes Panel und per BorderLayout nach NORTH, die Textarea nach WEST, das Panel mit den Labels nach CENTER und das CANVAS nach SOUTH. Sollte in etwa das selbe herauskommen.

gruß
Heavy

Danke Heavy, das werde ich probieren!

Aber vorher habe ich NOCH ein anderes Problem.
–> Was ist bitte eine NullPointerException?
Ich hoffe, daß ich den Fehler eingrenzen kann, wenns mir nicht gelingt, muß ich wohl das Forum nochmal bemühen.

Danke nochmal,
Gustav

Moin

Aber vorher habe ich NOCH ein anderes Problem.
–> Was ist bitte eine NullPointerException?

Beispiel (klappt mit allen Klassen, nicht nur mit String):

String S = „“;
System.out.println (""+S.length());

Auf S (also „“) wird length() aufgerufen, das geht gut, aber:

S = null;
System.out.println (""+S.length());

geht nicht gut, da S ist auf „null“ (wie leer, undefiniert) verweist. null hat keine Methoden und schmeisst bei jedem Zugriff eine NullPointerException.

klassischer Fehler ist:

(1) public class bla {

(2) public String test;

(3) public void methode(){
(4) test.length();
(5) }

Aus Zeile (2) macht der Compiler aber „public String test = null“, test muss ja einen Wert haben. wenn das in Zeile (4) immernoch gilt gibts Ärger.

(Tipp: E.printStackTrace() im catch-Block hilft)

cu