Panel zentrieren

Kanitrino

Bekanntes Mitglied
Hallo Experten,

Ich habe Folgendes vor : Der JFrame einer Applikation soll den gesamten Bildschirm einnehmen, und die eigentliche Graphik bzw. Animation soll, unabhängig von der Bildschirmgröße, zentral vor einem neutralen Hintergrund (hier : gelb) darin erscheinen.

Diese "eigentliche Graphik" habe ich nun im u. a. Beispiel durch ein Panel (JPanel1) der Größe 200*200, mit Rand und rosa Hintergrund, dargestellt. Dann habe ich es per Borderlayout ins Zentrum eingebunden.

Das geht aber so nicht ! Mein Panel füllt nun den gesamten Bildschirm aus, die "setSize()"-Angabe wird ignoriert.

Kann mir jemand sagen, wie man so etwas realisieren kann ?

Java:
import java.awt.*;
import javax.swing.*;

public class PanelTest extends JPanel
{
	Toolkit tool;
	Dimension size;
	Panel1 panel1;

	public PanelTest()
	{
		size = tool.getDefaultToolkit().getScreenSize();
		setPreferredSize(size);
		setBackground(Color.yellow);
		JFrame frame = new JFrame("Test");
		frame.setLocation(0, 0);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(this);
		frame.pack();
		setPanels();
		frame.setVisible(true);
	}

	public static void main(String arguments[])
	{
		new PanelTest();
	}

	public void setPanels()
	{
		setLayout(new BorderLayout());
		panel1 = new Panel1();
		add("Center", panel1);

	}
}

class Panel1 extends JPanel
{
	public Panel1()
	{
		this.setSize(200, 200);
		this.setBorder(BorderFactory.createEtchedBorder());
		setBackground(Color. pink);
	}
}
(N.B.: Eigentlich habe ich ja schon eine Lösung gehabt, nämlich ein Applet zu schreiben und es zentral in einen html-Rahmen einzubinden. Allerdings meckern die Leute hier im Forum immer über Applets, deshalb wollte ich es mal mit einer Applikation versuchen)
 

KrokoDiehl

Top Contributor
Das BorderLayout macht die CENTRAL-Komponente so groß wie möglich. Du müsstest also an die Seiten Dummies legen, die eine gewisse Breite/Höhe haben. Geht einfach durch
Code:
Box.createHorizontalStrut(50)
und entsprechende.
 

jgh

Top Contributor
das wäre eine weitere Möglichkeit...wenn du nur auf deinem Panel1 was machen willst?

Java:
import java.awt.*;
import javax.swing.*;

public class PanelTest extends JPanel {

    public PanelTest() {

        // setPreferredSize(Toolkit.getDefaultToolkit().getScreenSize());
        setBackground(Color.yellow);
        JFrame frame = new JFrame("Test");
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(this);
        setPanels();
        setLayout(new GridBagLayout());
        frame.setVisible(true);
    }

    public static void main(String arguments[]) {
        new PanelTest();
    }

    public void setPanels() {
        Panel1 panel1 = new Panel1();
        add(panel1);

    }
}

class Panel1 extends JPanel {
    public Panel1() {
        this.setPreferredSize(new Dimension(200, 200));
        this.setBorder(BorderFactory.createEtchedBorder());
        setBackground(Color.pink);
    }
}
 

Kanitrino

Bekanntes Mitglied
das wäre eine weitere Möglichkeit...wenn du nur auf deinem Panel1 was machen willst?
Hurra, hurra, es klappt !
(Ich ringe noch darum, zu verstehen, warum, so ganz ohne Constraints)

In der Tat dient es nur dazu, Panel1 einzubinden, für mich wäre es also richtig.

Vielen Dank!


xHelp hat gesagt.:
Du könntest ggf versuchen setMaximumSize auf 200x200 zu setzen.
Das habe ich jetzt ausprobiert, es verändert aber nichts.

KrokoDiehl hat gesagt.:
Du müsstest also an die Seiten Dummies legen, die eine gewisse Breite/Höhe haben.
Daran hatt ich auch schon gedacht. Ich fand es aber unelegant, ein "schlaues" Kommando durch noch mehr Schauheit überlisten zu wollen, damit es weniger schlau wird...
 
Zuletzt bearbeitet:

Kanitrino

Bekanntes Mitglied
ja, es kam wie offenbar so oft : Nun habe ich ein neues Problem.

Mit dem nunmehr so elegant zentrierten JPanel läuft die Maus in die Irre. Ihre Koordinaten orientieren sich immer noch am Bildschirm, nicht aber am JPanel. Ich habe den Koordinatenursprung nun mit der Bildschirmgröße und der JPanel-Größe neu berechnet. Allerdings traue ich dem Braten nicht ganz, die Titelleiste muss z. B. auch berücksichtigt werden, sie schiebt das Bild (in diesem Falle) nach unten, und deren Maße können sich ja auch ändern.

Gibt es eine elegantere Möglichkeit, die Maus auf die linke obere Ecke des JPanels "einzunullen" ?
 

Kanitrino

Bekanntes Mitglied
Ach so... Du einst also, einfach den Mouse Listener in die JPanel-Klasse einbauen, die dann zum Zeichnen des Panels verwendet wird ?
Hört sich doch ganz einfach an, muss ich ausprobieren.
 

Marco13

Top Contributor
Nun, die Implementierung (also die eigentliche MouseListener-Klasse selbst) kann liegen wo sie will - auch in einer anderen Datei und so (falls du das meintests). Wichtig ist eben, dass man
panel.addMouseListener(mouseListener);
aufruft, und nicht
irgendwasAnderesWoDasPanelDrinIst.addMouseListener(mouseListener);
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
CptK Ordentlicher Code & Panel ab bestimmter Komponentenzahl scrollbar machen AWT, Swing, JavaFX & SWT 12
B JTextField in Panel positionieren AWT, Swing, JavaFX & SWT 1
R Swing Panel nur bei Maus sichtbar AWT, Swing, JavaFX & SWT 2
B mit Maus verschiebbares Panel AWT, Swing, JavaFX & SWT 2
S Labels in Panel erstellen AWT, Swing, JavaFX & SWT 1
H Aus Array Container Panel an Tabbedpane zuweisen AWT, Swing, JavaFX & SWT 29
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
J Aufklappbares Panel in Toolbar AWT, Swing, JavaFX & SWT 6
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
J Panel auf Frame positionieren AWT, Swing, JavaFX & SWT 9
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
B AWT Panel größe im BorderLayout einstellen AWT, Swing, JavaFX & SWT 1
K Swing Entfernen von Panel funktioniert nicht AWT, Swing, JavaFX & SWT 5
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
L JavaFX Klickverhalten bei einem Panel AWT, Swing, JavaFX & SWT 1
A Swing Panel mit ScrollBar AWT, Swing, JavaFX & SWT 7
K Panel verdeckt MenuItem AWT, Swing, JavaFX & SWT 5
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Graphics auf Panel AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
P AWT Panel überschreibt vorheriges... AWT, Swing, JavaFX & SWT 2
Thallius Swing Warum kann man Texte im Panel nicht markieren? AWT, Swing, JavaFX & SWT 1
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
M AWT Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 7
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
M JavaFX Slide Panel AWT, Swing, JavaFX & SWT 2
P Swing Panel nicht sichtbar AWT, Swing, JavaFX & SWT 1
M Swing JtextField Panel in ander Panel aufrufen AWT, Swing, JavaFX & SWT 0
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
S ScrollPane in Textarea und auf Panel AWT, Swing, JavaFX & SWT 4
D Swing Bei Button Click neues Panel laden AWT, Swing, JavaFX & SWT 3
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
S Swing JMenu löscht auf panel gezeichnetes AWT, Swing, JavaFX & SWT 3
X Java Panel zeitweise repainten AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
W Swing Nicht-Editierbares Textfeld in Panel in ScrollPane AWT, Swing, JavaFX & SWT 9
B zweidimensionales Buttonarray auf Panel AWT, Swing, JavaFX & SWT 11
F JAVA-EDITOR: Panel in Frame aufnehmen AWT, Swing, JavaFX & SWT 3
F textarea lässt panel verschwinden AWT, Swing, JavaFX & SWT 4
T LayoutManager GridLayout panel.setSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Panel lässt sich nicht bewegen AWT, Swing, JavaFX & SWT 2
E Panel mit Leben füllen AWT, Swing, JavaFX & SWT 2
K Swing Maus in Panel einsperren AWT, Swing, JavaFX & SWT 8
D Panel in Panel zentriert nicht richtig AWT, Swing, JavaFX & SWT 3
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
P Swing Button über gesamtes Panel AWT, Swing, JavaFX & SWT 2
O LayoutManager Panel in Panel "maximieren" AWT, Swing, JavaFX & SWT 2
C AWT Horizontale Linie in einem Panel AWT, Swing, JavaFX & SWT 12
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
B Export eines Panel mit ScrollBar AWT, Swing, JavaFX & SWT 4
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
bluerob Panel im BorderLayout South wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
M Swing Panel klassenübergreifend ändern AWT, Swing, JavaFX & SWT 6
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
A 2D-Grafik Panel inhalt löschen AWT, Swing, JavaFX & SWT 5
H Scroll Panel wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 6
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
Kenan89 2D-Grafik paintComponent quetsch alles in Panel AWT, Swing, JavaFX & SWT 26
C Bild auf Panel vergrößern und verschieben AWT, Swing, JavaFX & SWT 4
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
H LayoutManager Panel verschieben sich AWT, Swing, JavaFX & SWT 5
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
S Vaadin: Panel AWT, Swing, JavaFX & SWT 10
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
C Etwas durchsichtig machen über einem Panel AWT, Swing, JavaFX & SWT 7
K Panel zu Laufzeit ändern AWT, Swing, JavaFX & SWT 6
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
D Panel aus externer Klasse holen AWT, Swing, JavaFX & SWT 2
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
T Listener in anderen Panel deaktivieren AWT, Swing, JavaFX & SWT 3
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
GUI-Programmer Informations-Panel an Label AWT, Swing, JavaFX & SWT 2
J JPanel mit anderem Panel aus anderer Klasse setzen AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Panel-Zeichnung erscheint nicht AWT, Swing, JavaFX & SWT 7
S Panel rapaint AWT, Swing, JavaFX & SWT 18
T AffineTransform wirkt sich nur auf dem ersten Panel aus AWT, Swing, JavaFX & SWT 3
K Swing: Panel in Panel erzeugen AWT, Swing, JavaFX & SWT 11
M Panel in SWT einfügen AWT, Swing, JavaFX & SWT 12
T auf Panel zeichnen AWT, Swing, JavaFX & SWT 4
A FormLayout Panel-Breite AWT, Swing, JavaFX & SWT 7
Dit_ "Expandable" Panel ? AWT, Swing, JavaFX & SWT 6
A Panel-Unterklasse funktioniert nicht AWT, Swing, JavaFX & SWT 16
A Panel zu klein AWT, Swing, JavaFX & SWT 14
M Eigenes Panel aus Component? AWT, Swing, JavaFX & SWT 5
S Swing Größe von JLabels verändern sich in einem Panel unterschiedlich AWT, Swing, JavaFX & SWT 6
B Panel als Bild speichern AWT, Swing, JavaFX & SWT 11
V Panel/Icon aktualisieren AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen


Oben