Layoutmanager-Richtlinie ?

  • Themenstarter Themenstarter Pèrigord
  • Beginndatum Beginndatum
P

Pèrigord

Gast
Hallo,

Habe eine kleine Frage zu den verschiedenen Layoutmanager.

Beim zusammenbauen von Layout's, wäre es gut wenn man sich die grösse berechenen könnte, da diese auch variert, ja nach dem was der Inhalt un oder Hintergrund ist.

Was ich suche ist eine Erklärung die, die Masse von den verschiedenen Layout's angiebt, also Layoutmanager-Richtlinie ? Habe in der API leider nichts herauslesen können.

Vielen Dank
P.

p.s. die Frage um zu posten "was befindet sich in der Mitte unserer Galaxie?" sollte nicht heissen "in der Mitte unseres Sonnensystems" ?
 
[...]wäre es gut wenn man sich die grösse berechenen könnte, da diese auch variert, ja nach dem was der Inhalt un oder Hintergrund ist[...]

Was meinst du mit größe berechnen? -Etwa die Größe das Containers, der die Komponenten enthätlt? Die ist ja in der Regel eh nicht konstant und daher benutzt ja vor allem Layouts. Wenn du die Anfangsgröße des Container meinst, dann kann ich nur sagen, dass man diese ja in der Regel eh vorher weiß (außer bei sehr großer Verschachtelung, auf die man eh verzichten kann, wenn man einen guten LayoutManager wie etwa FormLayout von JGoodies verwendet.

Also stell doch bitte deine Frage etwas präzieser, denn ich kann damit jetzt nur spekulieren was du meinst (könnte möglicherweise aber auch an mir liegen...)!
 
Hm, ja zum Beispiel. Wir haben ein JFrame, im Norden setze ich ein JPanel mit buttons und labels und im Center setze ich eine Zeichenkomponente(die verschiedene Sachen zeichnet) die von JPanel erbt.

Eigentlich wollte ich die Zeichenkomponente in ein JPanel setzen, aber leider zeichent es nichts. Daher möchte ich irgendwie herausfinden was da mit der Grösse passiert?

Danke
 
Was ich suche ist eine Erklärung die, die Masse von den verschiedenen Layout's angiebt

Sicher? Die Masse? 😛

Du kannst der Komponente deren Größe dich interessiert einen ComponentListener adden (myComponent.addComponentListener). In der Methode componentResized wirst du jedes mal informiert, wenn sich die Größe geändert hat. Dann kannst du sie mit myComponent.getSize holen und ausgeben oder was auch immer du damit machen willst
 
Eigentlich wollte ich die Zeichenkomponente in ein JPanel setzen, aber leider zeichent es nichts.

Warum nicht, sollte eigentlich imho funktionieren, wenn mans richtig macht, poste doch mal diesen Code. Ich glaube nänlich dann kannst du dir nun diese "Folgeprobleme" ersparen.

Kurz noch mal zum richtigen Zeichnen in einem JPanel:
Code:
paintComponent(Graphics g)
und nicht
Code:
paint(Graphics g)
oder andere Zeichenmethoden überschreiben und in die 1. Zeile der paintComponent() den super - Aufruf schreiben, also
Code:
super.paintComponent(g);
. Danach kann alles weitere Zeichnen erfolgen.
 
Sicher? Die Masse? 😛

Du kannst der Komponente deren Größe dich interessiert einen ComponentListener adden (myComponent.addComponentListener). In der Methode componentResized wirst du jedes mal informiert, wenn sich die Größe geändert hat. Dann kannst du sie mit myComponent.getSize holen und ausgeben oder was auch immer du damit machen willst

Hi,

Was für Komponenten düren es sein, auch Klassen?

Z.B. so, oder wie sollte die Syntax sein? Und es suzugeben einfach [c]System.out.println(w1.getsize());[/c] , oder wie?
Java:
Grafikwürfel1 w1 = new Grafikwürfel1();
frame.add(BorderLayout.CENTER, w1);
frame.addComponentListener(BorderLayout.CENTER, w1);
w1.getSize();

@GUI-Programmer:
Muss man dies immer mit einem super-Aufruf machen? Habe auch schon ohne diesen gezeichnet.
Werde im Lauf des Threads, dann ein Code posten.

Danke
P.
 
Der super Aufruf bedeutet ja, dass die "originale" paintComponent() auch aufgerufen wird, also zuerst der Körper des Komponenten gezeichnet wird, bei einem JPanel ohne irgendwelche Einstellungen ganz einfach ein Rechteck mit der Hintergrundfarbe (falls opaque). Von daher brauchst du es nicht unbedingt, es wäre aber für eine Zeichenfläche schon sinnvoll.

Noch was: Die paint() Methode ruft zuerst die paintComponet(), dann die paintBorder() und danach die paintChildren() auf.
Du kannst ja mal, aber wirklich nur zu Testzwecken, diese überschreiben und den super Aufruf wegglassen. Du wirst sehen, dass weder Hintergrund, noch Border noch irgendwelche Komponenten, die diesem hinzugefügt wurden gezeichnet werden.
 
Hi,

Was für Komponenten düren es sein, auch Klassen?

Z.B. so, oder wie sollte die Syntax sein? Und es suzugeben einfach [c]System.out.println(w1.getsize());[/c] , oder wie?
Java:
Grafikwürfel1 w1 = new Grafikwürfel1();
frame.add(BorderLayout.CENTER, w1);
frame.addComponentListener(BorderLayout.CENTER, w1);
w1.getSize();
P.

Nur Klassen die von Component erben, also in folgender Art:

Java:
final Grafikwürfel1 w1 = new Grafikwürfel1();
frame.add(BorderLayout.CENTER, w1);
w1.addComponentListener(new ComponentAdapter() {
         public void componentResized(ComponentEvent e) {
              System.out.println(w1.getsize());
         }
});
 
Ja das funktioniert mit dem anzeigen der Grösse der Komponente, Danke.

Funktioniert das zeichnen auf einem JPanel?
 

Neue Themen


Zurück
Oben