Moinson! Ich versuche mir gerade eine GUI zusammenzubasteln, aber ein paar Sachen klappen noch nicht so richtig, siehe unten. Hier erstmal mein Quelltext:
Nun zu den Problemen:
1.) Das Fenster öffnet sich nicht gewünscht mit 600x600 sondern in der Größe 0x0 und die Komponenten werden erst sichtbar, wenn ich es größer ziehe. Habe versucht, ob sich daran was ändert, wenn ich panel noch mit setPreferred/Maximum/MiniumSize() belege, aber nö. Woran liegt das, dass setSize nicht wirkt?
2.) Ich hätte die Buttons gerne oben links, ich kann aber scheinbar nur oben (mit BorderLayout.NORTH) ODER links (mit BorderLayout.WEST) auswählen. Gibts da ne andere Möglichkeit?
3.) graphPanel soll eine Fläche werden, wo später verschiedene Formen optisch dargestellt werden. Bei der aktuellen Implementation nimmt es allerdings die komplette Fläche unter dem ersten Panel ein, ich fände eine räumliche Begrenzung aber sinnvoller, zb 300x300. Was mir dazu gerade spontan eingefallen ist: Ist es möglich, graphPanel in panel zu schachteln und dann durch die GridBagLayout-Grid von panel die Größe indirekt festzulegen? Also indem ich zb sage, dass graphPanel über 2x2 Felder der Grid geht?
Danke im Voraus
Java:
import javax.swing.*;
import java.io.File;
import java.awt.event.*;
import java.awt.*;
public class Gui extends JFrame implements ActionListener
{
// GUI Komponenten
private JButton button1;
private JButton button2;
private JButton button3;
private JLabel label;
private JPanel panel;
private JPanel graphPanel;
public Gui()
{
this.setTitle("Titel");
this.setSize(600,600);
// Erschaffen der Komponenten
panel = new JPanel();
graphPanel = new JPanel();
label = new JLabel();
button1 = new JButton("Button 1");
button2 = new JButton ("Button 2");
button3 = new JButton ("Button 3");
// Layout + Eventhandling
graphPanel.setBackground(Color.white);
GridBagLayout gbl=new GridBagLayout();
panel.setLayout(gbl);
GridBagConstraints gbc=new GridBagConstraints();
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(5,5,5,5);
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridheight = 1;
gbl.setConstraints(button1, gbc);
panel.add(button1);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.gridheight = 1;
gbl.setConstraints(label, gbc);
panel.add(label);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridheight = 1;
gbl.setConstraints(button2, gbc);
panel.add(button2);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridheight = 1;
gbl.setConstraints(button3, gbc);
panel.add(button3);
pack();
Container contentPane = getContentPane();
contentPane.add(panel, BorderLayout.NORTH);
contentPane.add(graphPanel);
}
public void actionPerformed (ActionEvent ae)
{
// Eventhandling
}
public static void main(String[] args)
{
Gui meineGui = new Gui();
meineGui.setVisible(true);
}
}
Nun zu den Problemen:
1.) Das Fenster öffnet sich nicht gewünscht mit 600x600 sondern in der Größe 0x0 und die Komponenten werden erst sichtbar, wenn ich es größer ziehe. Habe versucht, ob sich daran was ändert, wenn ich panel noch mit setPreferred/Maximum/MiniumSize() belege, aber nö. Woran liegt das, dass setSize nicht wirkt?
2.) Ich hätte die Buttons gerne oben links, ich kann aber scheinbar nur oben (mit BorderLayout.NORTH) ODER links (mit BorderLayout.WEST) auswählen. Gibts da ne andere Möglichkeit?
3.) graphPanel soll eine Fläche werden, wo später verschiedene Formen optisch dargestellt werden. Bei der aktuellen Implementation nimmt es allerdings die komplette Fläche unter dem ersten Panel ein, ich fände eine räumliche Begrenzung aber sinnvoller, zb 300x300. Was mir dazu gerade spontan eingefallen ist: Ist es möglich, graphPanel in panel zu schachteln und dann durch die GridBagLayout-Grid von panel die Größe indirekt festzulegen? Also indem ich zb sage, dass graphPanel über 2x2 Felder der Grid geht?
Danke im Voraus