Grösse von BorderLayout.CENTER ermitteln

Status
Nicht offen für weitere Antworten.

max60watt

Mitglied
Hallo,

ich möchte die Grösse von BorderLayout.CENTER ermitteln um darin ein JPanel mit Null-Layout und setPreferredSize zu platzieren.
Nachstehend ein KSKB, welches nach verschieben der JToolBar eigentlich die Grösse von BorderLayout.CENTER ermitteln soll (Kommentar).

Kann mir jemand weiterhelfen ?

Code:
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;

public class Main extends JFrame implements AncestorListener{
JToolBar toolbar = new JToolBar();
BorderLayout borderLayout = new BorderLayout();
//------------------------------------------------------------------------------------------------
  public Main(){
    super("Main");
    setLayout(borderLayout);
    toolbar.add(new JButton("Button"));
    add(toolbar, BorderLayout.NORTH);

    toolbar.addAncestorListener(this);
  }
//------------------------------------------------------------------------------------------------
  public void ancestorAdded(AncestorEvent event){
    getCenterSize();
  }
//------------------------------------------------------------------------------------------------
  public void ancestorMoved(AncestorEvent event){}
//------------------------------------------------------------------------------------------------
  public void ancestorRemoved(AncestorEvent event){}
//------------------------------------------------------------------------------------------------
  public void getCenterSize(){
    // hier die Grösse von BorderLayout.CENTER ermitteln
  }
//------------------------------------------------------------------------------------------------
  public static void main(String args[]){
  Main t = new Main();
    t.setSize(800,600);
    t.setLocationRelativeTo(null);
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    t.setVisible(true);
  }
//------------------------------------------------------------------------------------------------
}


Grüss Max
 

André Uhres

Top Contributor
Java:
/*
 * Main.java
 * 
 * ermittelt die Grösse von BorderLayout.CENTER
 * anhand der dor abgelegten Komponente.
 * Die Komponente (hier ein JPanel) erhält einen ComponentListener.
 * Bei componentResized hat sie vollautomatisch die exakte Grösse
 * vom BorderLayout.CENTER.
 */
 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
 public class Main extends JFrame {
 private JToolBar toolbar;
 private JPanel centerPanel;
 public Main() {
 super("Main");
 toolbar = new JToolBar();
 centerPanel = new JPanel(null);
 toolbar.add(new JButton("Button"));
 add(toolbar, BorderLayout.NORTH);
 add(centerPanel, BorderLayout.CENTER);
 centerPanel.addComponentListener(new ComponentAdapter() {
 @Override
 public void componentResized(final ComponentEvent e) {
 System.out.println(getCenterSize());
 }
 });
 }
 public Dimension getCenterSize() {
 // hier die Grösse von BorderLayout.CENTER ermitteln
 return centerPanel.getSize();
 }
 public static void main(final String[] args) {
 Runnable gui = new Runnable() {
 @Override
 public void run() {
 try {
 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
 } catch (Exception ex) {
 ex.printStackTrace();
 }
 Main t = new Main();
 t.setSize(800, 600);
 t.setLocationRelativeTo(null);
 t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 t.setVisible(true);
 }
 };
 //GUI must start on EventDispatchThread:
 SwingUtilities.invokeLater(gui);
 }
 }
 
Zuletzt bearbeitet:

Nachtschatten

Aktives Mitglied
Habe das selbe Problem. Ich möchte im Center eine Grafik ausgeben die immer in der Mitte des Centers sein soll ? Um die Position zu berechnen wollte ich die Größe des Centers ermitteln. So das die Grafik je nach Vergrößern oder Verkleinern des Fensters in der Mitte bleibt.

Hat jemand einen Tipp für mich ?
 

Nachtschatten

Aktives Mitglied
Bin völliger Neuling. Mache die Umschulung erst seit 6 Wochen und hatte davor nie etwas damit zu tun.

Mit dem Grid Layout meinst du ein 1,1 ins Center Packen ?
Die Aufgabenstellung ist das sich der Kreis in der Mitte per Buttons vergrößern oder verkleinern lässt. Und er soll immer in der Mitte bleiben.
 

L-ectron-X

Gesperrter Benutzer
Die Lösung zu dem, was ihr machen sollt, hängt von der Aufgabenstellung ab.
Was für ein Kreis? Grafik/Bild oder selbst gezeichnet?
 

Nachtschatten

Aktives Mitglied
2.3 Aufgabe (A)
Erstellen Sie eine Applikation mit weißem Hintergrund, einer Schaltfläche "zoom +" und einem JLabel-Feld. Der Button soll die Hintergrundfarbe cyan besitzen. In der Mitte des 400x400 Pixel großen Frames soll ein Kreis mit Anfangsdurchmesser 10 gezeichnet werden. Bei jedem Klick auf den Button soll sich der Durchmesser um 10 Pixel erhöhen.

1.6 Aufgabe (B)
Ergänzen Sie das Programm zu Aufgabe 2.3 aus Kapitel 3 um einen zweiten Button "zoom -", so dass der Kreis jetzt sowohl vergrößert als auch verkleinert werden kann. Die Änderung beträgt jeweils 10 Pixel.
Die minimale Größe ist 10 und die maximale Größe ist 200. Wählen Sie die Fenstergröße 400x400. Der Kreis erscheint immer zentriert.

Inzwischen weiß ich selbst positionieren wäre besser gewesen. Aber denke müsste ja auch mit dem Layout gehen.
 

L-ectron-X

Gesperrter Benutzer
Inzwischen weiß ich selbst positionieren wäre besser gewesen.
In diesem Fall, ja.

Aber denke müsste ja auch mit dem Layout gehen.
Sicher. Dazu musst du an der Komponente, auf der du malst, nach jedem Zoomen die bevorzugte Größe setzen (setPreferredSize(...)) und danach validate() aufrufen, damit der LayoutManager die Komponente entsprechend ihrer neuen Größe positioniert.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben