Supportnet / Forum / Anwendungen(Java,C++...)
Probleme mit Java AWT
Frage
Hallo,
Ich schaue mir gerade ein Tutorial zu Java AWT an.
Laut dem Tutorial sollte der Code unten funktionieren.
Leider erscheinen im Fenster aber die Buttons (im Panel2) nicht.
Wäre nett wenn jemand, der sich damit auskennt mal den Code anschauen könnte.
private void init()
{
TextField adresse= new TextField(50);
Button button1 = new Button("Button");
Button button2 = new Button("Button");
Button button3 = new Button("Button");
Button button4 = new Button("Button");
Button button5 = new Button("Button");
Button button6 = new Button("Button");
List liste = new List(70);
this.setSize(new Dimension(700, 500));
this.setTitle("Uebung1");
Panel panel1 = new Panel();
panel1.setLayout(new FlowLayout(2));
panel1.add(new Label("Adresse: "));
panel1.add(adresse);
adresse.setText("TextField....");
Panel panel2 = new Panel();
panel2.setLayout(null);
button1.setBounds(0,0,30,15);
button2.setBounds(0,20,30,15);
button3.setBounds(0,40,30,15);
button4.setBounds(0,60,30,15);
button5.setBounds(0,80,30,15);
button6.setBounds(0,100,30,15);
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
panel2.add(button4);
panel2.add(button5);
panel2.add(button6);
Panel panel3 = new Panel();
panel3.setLayout(new FlowLayout());
panel3.add(liste);
Panel panel4 =new Panel();
panel4.setLayout(new GridLayout(1,3));
panel4.add(new Checkbox("Checkbox"));
panel4.add(new Checkbox("Checkbox"));
panel4.add(new Checkbox("Checkbox"));
this.setLayout(new BorderLayout());
this.add(panel1, BorderLayout.NORTH);
this.add(panel2, BorderLayout.WEST);
this.add(new TextArea(),BorderLayout.CENTER);
this.add(panel3,BorderLayout.EAST);
this.add(panel4,BorderLayout.SOUTH);
}
Antwort 1 von mr_x_hacker
Hi,
wieso wird das Layout von Panel 2 auf null gesetzt? Hab zwar länger kein AWT mehr gemacht (wer macht das eigentlich noch??), aber in SWT klappt es net, wenn das Layout == null ist :)
Ciao Sascha
wieso wird das Layout von Panel 2 auf null gesetzt? Hab zwar länger kein AWT mehr gemacht (wer macht das eigentlich noch??), aber in SWT klappt es net, wenn das Layout == null ist :)
Ciao Sascha
Antwort 2 von jo222
Das Layout auf Null setzen tut man dann, wenn man die Position der Steuerelemente selber festlegen möchte.
siehe z.B. hier:
http://www.addison-wesley.de/service/Krueger/kap21002.htm#E15E205
siehe z.B. hier:
http://www.addison-wesley.de/service/Krueger/kap21002.htm#E15E205
Antwort 3 von Rangoo
´n Abend!
Dein Problem ist, dass ein null-Layout sehr schwach ist. Das heißt, jedes andere Layout drängt ein null-Layout in den Hintergrund. In deinem Fall sagt sich das Border-Layout, das du verwendest, dass das null-Layout keine Anzeigefläche zur Verfügung gestellt bekommt, weil du keine Größe angegeben hast. Definier eine Größe für dein panel2 und es sollte auch angezeigt werden.
Bei einer Reihe von Buttons würde ich übrigens immer auf ein Flow- oder noch besser ein Grid-Layout zurückgreifen.
Gruß!
Dein Problem ist, dass ein null-Layout sehr schwach ist. Das heißt, jedes andere Layout drängt ein null-Layout in den Hintergrund. In deinem Fall sagt sich das Border-Layout, das du verwendest, dass das null-Layout keine Anzeigefläche zur Verfügung gestellt bekommt, weil du keine Größe angegeben hast. Definier eine Größe für dein panel2 und es sollte auch angezeigt werden.
Bei einer Reihe von Buttons würde ich übrigens immer auf ein Flow- oder noch besser ein Grid-Layout zurückgreifen.
Gruß!
Antwort 4 von jo222
Vielen Dank für den Tipp. Jetzt funktioniert es.
Flow und Grid Layout geht in dem Fall nicht. Das oben war eine Uebung aus den Tutorial, bei der die Buttons am Schluss in einer ganz bestimmten Anordnung zueinander stehen sollten. Deshalb hab ich auch das Null Layout genommen.
Flow und Grid Layout geht in dem Fall nicht. Das oben war eine Uebung aus den Tutorial, bei der die Buttons am Schluss in einer ganz bestimmten Anordnung zueinander stehen sollten. Deshalb hab ich auch das Null Layout genommen.
Antwort 5 von jo22
Ich hab das Ganze jetzt nochmal mit Swing erstellt und wieder werden die Buttons nicht angezeigt. Ich hab mal gegoogelt. Eigentlich müsste sich das Null Layout beim JPanel gleich verhalten wie beim Panel
private void init()
{
this.setSize(new Dimension(700, 500));
this.setTitle("Uebung2");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JPanel panel1 =new JPanel();
panel1.setLayout(new FlowLayout(2));
panel.add(panel1, BorderLayout.NORTH);
JLabel beschriftung=new JLabel("Adresse: ");
panel1.add(beschriftung);
JTextField adresse= new JTextField("TextField...",40);
panel1.add(adresse);
JPanel panel2=new JPanel();
panel2.setLayout(null);
panel.add(panel2, BorderLayout.WEST);
panel2.setSize(new Dimension(120,500));
JButton button1=new JButton("Button");
JButton button2=new JButton("Button");
JButton button3=new JButton("Button");
JButton button4=new JButton("Button");
JButton button5=new JButton("Button");
JButton button6=new JButton("Button");
button1.setBounds(10,0,80,30);
button2.setBounds(10,40,80,30);
button3.setBounds(10,80,80,30);
button4.setBounds(10,120,80,30);
button5.setBounds(10,220,80,30);
button6.setBounds(10,260,80,30);
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
panel2.add(button4);
panel2.add(button5);
panel2.add(button6);
this.setContentPane(panel);
}
private void init()
{
this.setSize(new Dimension(700, 500));
this.setTitle("Uebung2");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JPanel panel1 =new JPanel();
panel1.setLayout(new FlowLayout(2));
panel.add(panel1, BorderLayout.NORTH);
JLabel beschriftung=new JLabel("Adresse: ");
panel1.add(beschriftung);
JTextField adresse= new JTextField("TextField...",40);
panel1.add(adresse);
JPanel panel2=new JPanel();
panel2.setLayout(null);
panel.add(panel2, BorderLayout.WEST);
panel2.setSize(new Dimension(120,500));
JButton button1=new JButton("Button");
JButton button2=new JButton("Button");
JButton button3=new JButton("Button");
JButton button4=new JButton("Button");
JButton button5=new JButton("Button");
JButton button6=new JButton("Button");
button1.setBounds(10,0,80,30);
button2.setBounds(10,40,80,30);
button3.setBounds(10,80,80,30);
button4.setBounds(10,120,80,30);
button5.setBounds(10,220,80,30);
button6.setBounds(10,260,80,30);
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
panel2.add(button4);
panel2.add(button5);
panel2.add(button6);
this.setContentPane(panel);
}
Antwort 6 von mr_x_hacker
Hi,
man setzt die Größe mit setPreferredSize()...
Ansonsten... ich weiß ja nicht, was Du da für ein Tutorial machst... aber so richtig "Stil" hat das ganze nicht... man benutzt normal Layouts - wenn es anspruchsvoller werden soll, eben GridbagLayout oder so... aber dieses direkte Setzen von Größen sollte man vermeiden...
Ciao Sascha
man setzt die Größe mit setPreferredSize()...
Ansonsten... ich weiß ja nicht, was Du da für ein Tutorial machst... aber so richtig "Stil" hat das ganze nicht... man benutzt normal Layouts - wenn es anspruchsvoller werden soll, eben GridbagLayout oder so... aber dieses direkte Setzen von Größen sollte man vermeiden...
Ciao Sascha
Antwort 7 von jo22
Danke für den Tipp.
Für die anspruchvollen Dinge verwende ich den Visual Editor.
Das Teil oben dient auch nur rein zu Lern und Übungszwecken.
Für die anspruchvollen Dinge verwende ich den Visual Editor.
Das Teil oben dient auch nur rein zu Lern und Übungszwecken.

