Hallo,
ich habe ein JPanel, das ich auf ein JFrame setze. Dieses JPanel ist mit dem GridBagLayout bestückt. Jedoch will das noch nicht ganz so, wie ich will.
Mittlererweile bin ich so weit, das ich die Positionierung der Elemente zueinander schon soweit ganz gut heraus habe, jedoch in der Position des ganzen ist mir das ganze noch nicht so, wie ich es mir dachte.
Desweiteren will ich davon loskommen, die Platzhalter mit "leeren" JPaneln zu füllen und will von diesen weg, sodass die ganzen Gitterzellen, wo ich nichts haben will dann später auch wirklich leer sind, da ich mit einem Hintergrundbild das ganze etwas verschönern will und die leeren JPanels da störend im Bild sind. Funktioniert das ganze vielleicht mit Constraint insets besser?
Nun zu der Klasse:
Das ganze platziere ich auf einem JFrame (auch 1024,768):
Zu den angehängten Bildern:
Im Moment ist es so wie auf bild1.jpg, dass das ganze einfach mitten im eigentlichen Fenster ist, es soll aber so wie auf bild 2, am Rand platziert werden. Die größenverhältnisse einfach mal ignorieren, das hab ich mal schnell verkleinert nur und eingepasst, für das bild.
Sollte ich vielleicht nicht das GridBagLayout benutzen? Welche alternativen hätte ich dann?
Vielen Dank schon einmal für die hoffentlich kommenden Ratschläge.
Gruß
Daniel
ich habe ein JPanel, das ich auf ein JFrame setze. Dieses JPanel ist mit dem GridBagLayout bestückt. Jedoch will das noch nicht ganz so, wie ich will.
Mittlererweile bin ich so weit, das ich die Positionierung der Elemente zueinander schon soweit ganz gut heraus habe, jedoch in der Position des ganzen ist mir das ganze noch nicht so, wie ich es mir dachte.
Desweiteren will ich davon loskommen, die Platzhalter mit "leeren" JPaneln zu füllen und will von diesen weg, sodass die ganzen Gitterzellen, wo ich nichts haben will dann später auch wirklich leer sind, da ich mit einem Hintergrundbild das ganze etwas verschönern will und die leeren JPanels da störend im Bild sind. Funktioniert das ganze vielleicht mit Constraint insets besser?
Nun zu der Klasse:
Code:
public class StartScreen extends JPanel {
public StartScreen() {
setLayout(new GridBagLayout());
setSize(new Dimension(1024, 768));
setPreferredSize(new Dimension(1024, 768));
/**
* create space objects
*/
JPanel leftSpacePnl = new JPanel();
JPanel topSpacePnl = new JPanel();
JPanel centerSpacePnl = new JPanel();
JPanel bottomSpacePnl = new JPanel();
JLabel gameDescLbl = new JLabel("test");
/**
* set space object options
*/
topSpacePnl.add(gameDescLbl);
gameDescLbl.setFont(new Font("Arial", Font.BOLD, 45));
/**
* create layout objects
*/
JButton startBtn = new JButton("Start Game", null /* icon */);
JButton exitBtn = new JButton("Exit Game", null /* icon */);
/**
* create default constraint settings
*/
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.insets = new Insets(2, 2, 2, 2);
/*
* c.gridx sagt, welches die erste überdeckte Zelle von links her ist
* c.gridy sagt, welches die erste überdeckte Zelle von oben her ist
* c.gridwidth wieviele Zellen in horizontaler Richtung überdeckt werden
* c.gridheight wieviele Zellen in vertikaler Richtung überdeckt werden
*/
/**
* add space objects
*/
c.gridx = 0;
c.gridy = 0;
c.weightx = 1.0;
c.gridwidth = 6;
add(topSpacePnl, c);
c.gridx = 0;
c.gridy = 1;
c.gridheight = 1;
c.gridwidth = 1;
c.weightx = 0.1;
add(leftSpacePnl, c);
c.gridx = 2;
c.gridy = 1;
c.gridheight = 5;
c.weightx = 0.3;
add(centerSpacePnl, c);
c.gridx = 0;
c.gridy = 6;
c.gridheight = 1;
c.gridwidth = 6;
c.weightx = 1;
add(bottomSpacePnl, c);
/**
* add layout objects
*/
c.gridx = 1;
c.gridy = 1;
c.gridheight = 1;
c.gridwidth = 1;
c.weightx = 0.2;
add(startBtn, c);
c.gridx = 1;
c.gridy = 3;
add(exitBtn, c);
c.gridx = 3;
c.gridy = 1;
c.weightx = 0.4;
add(new JLabel("Highscore"), c);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
/*if (Configuration.GAME_BACKGROUND_IMAGE_PATH != null) {
g.drawImage(new ImageIcon(Configuration.GAME_BACKGROUND_IMAGE_PATH).getImage(), 0, 0, this);*/
}
}
}
Das ganze platziere ich auf einem JFrame (auch 1024,768):
Code:
add(new StartScreen(), BorderLayout.PAGE_START);
Zu den angehängten Bildern:
Im Moment ist es so wie auf bild1.jpg, dass das ganze einfach mitten im eigentlichen Fenster ist, es soll aber so wie auf bild 2, am Rand platziert werden. Die größenverhältnisse einfach mal ignorieren, das hab ich mal schnell verkleinert nur und eingepasst, für das bild.
Sollte ich vielleicht nicht das GridBagLayout benutzen? Welche alternativen hätte ich dann?
Vielen Dank schon einmal für die hoffentlich kommenden Ratschläge.
Gruß
Daniel