JPanel nach NORTH ausrichten

January

Mitglied
Hallo zusammen.
Trotz langer Suche finde ich nicht den Fehler: Das JPanel "test" soll oben/NORTH angeordnet werden.
Zur Zeit sieht es so (vertikal zentriert) aus:
________
|
|
|Eintrag
|
|_______

Ziel ist:
________
|Eintrag
|
|
|
|_______

setPreferredSize und JScrollPane sind eingebaut, da die Klasse normalerweise eine variable Anzahl von Einträgen anzeigt, die Fenstergröße aber immer die selber sein soll. Der Code ist aufs wesentliche gekürzt

Vielleicht kann mir ja irgendjemand sagen, wo mein (Denk-)Fehler ist.

Danke! January

Java:
package scroll;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Test extends JFrame {

	private static final long serialVersionUID = 1L;

	public Test (){
		JScrollPane tagesEintraegePanel = tagesEintraegePanelErzeugen();
		JPanel grundFlaeche = (JPanel) this.getContentPane();
		grundFlaeche.setLayout(new GridBagLayout());
		grundFlaeche.add(tagesEintraegePanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, GridBagConstraints.NORTH,
				GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 0, 0));
		pack();
		setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - this.getSize().width) / 2, (Toolkit
				.getDefaultToolkit().getScreenSize().height - this.getSize().height) / 2);
	}
	
	private JScrollPane tagesEintraegePanelErzeugen() {
		JPanel eintragsPanel = new JPanel();
		eintragsPanel.setLayout(new GridBagLayout());
		JLabel test = new JLabel("Das hier soll oben stehen");
		eintragsPanel.add(test, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, GridBagConstraints.NORTH,
					GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));
		JScrollPane ausgabe = new JScrollPane(eintragsPanel);
		ausgabe.setPreferredSize(new Dimension(300,300));
		return ausgabe;
	}
	
	public static void main (String [] args){
		Test fenster = new Test();
		fenster.setVisible(true);
	}
}
 
Tschuldigung, merke gerade, dass ich kein Unterforum gewählt habe. Kann man einen Beitrag noch verschieben? Habe keine Möglichkeit gefunden...
 
Hallo,
Du machst keinen Fehler, es funktioniert so. In diesem Fall geht es nur um eine relative Positionierung. (GridBagLayout hat andere Eigenschaften, als z.B. BorderLayout). Vielleicht wäre es besser einen anderen LayoutManager benutzen. In diesem Fall vielleicht GridLayout, BorderLayout.

z.B.:
Java:
  public Test(){
        Container grundFlaeche = getContentPane();
        grundFlaeche.setLayout(new BorderLayout());
        JScrollPane tagesEintraegePanel = tagesEintraegePanelErzeugen();
        grundFlaeche.add(tagesEintraegePanel,BorderLayout.NORTH);
        pack();
        //...
  }
  private JScrollPane tagesEintraegePanelErzeugen() {
        JPanel eintragsPanel = new JPanel();
        eintragsPanel.setLayout(new GridLayout(30,0));
        JLabel test = new JLabel("Das hier soll oben stehen");
        eintragsPanel.add(test);
        for (int i=1; i<30; i++){
            eintragsPanel.add(new JLabel("Zeile"+(i+1)+".............."));
        }
        JScrollPane ausgabe = new JScrollPane(eintragsPanel);
        ausgabe.setPreferredSize(new Dimension(300,300));
        return ausgabe;
    }

Gruß Attila
 
Zuletzt bearbeitet:
Und ich dachte immer das GridbagLayout kann alles :)
Habe es gelöst, indem ich den Code um

Java:
JPanel nordPosition = new JPanel();
nordPosition.setLayout(new BorderLayout());
nordPosition.add(eintragsPanel, BorderLayout.NORTH);
JScrollPane ausgabe = new JScrollPane(nordPosition);

ergänzt habe. Danke für die Anregung AttilaF
 
Zurück