Sathoan Geschrieben 3. März 2004 Geschrieben 3. März 2004 Ich habe hier ein kleines prob.... Und zwar habe ich frame, in dieses frame packe ich zwei panel und mache eines sichtbar - klappt auch wunderbar. Nun möchte ich auf ein event hin dieses panel unsichtbar machen und das andere sichtbar - das klappt leider nicht... das zweite panel wird erst sichtbar wenn ich das fenster mit der hand (automatisch verändern klappt auch nicht) größer oder kleiner mache... Woran liegt das? Hier mal der code...: import java.awt.Button; import java.awt.Checkbox; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Label; import java.awt.Panel; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Dialog1 extends Frame implements ActionListener, ItemListener { Button bt1; Button bt3; TextField Pw1; TextField Pw2; Panel panel; Frame rahmen; Button bt2; Checkbox Cbox1; Checkbox Cbox2; Panel panel2; /***************** * Konstruktor * ****************/ public Dialog1() { setTitle("Login"); setSize(200, 200); // Neue Panel erzeugen + panel hinzufuegen und sichtbar machen panel = new Panel(); panel2 = new Panel(); add(panel); panel.setVisible(true); // Layout Manager einrichten panel.setLayout(new FlowLayout()); panel2.setLayout(new GridLayout(5, 2)); // Buttons und Fields zum Panel hinzufuegen panel.add(new Label("Name")); panel.add(Pw1 = new TextField("test", 20)); panel.add(new Label("Passwort")); panel.add(Pw2 = new TextField("test", 20)); Pw2.setEchoChar('*'); panel.add(bt1 = new Button("Test")); // Buttons und Fields zum Panel2 hinzufuegen panel2.add( new Label("Ist die Archivierung der Scan-Belege beendet?")); panel2.add(Cbox1 = new Checkbox()); panel2.add(new Label("Ist der Interpreter heruntergefahren?")); panel2.add(Cbox2 = new Checkbox()); panel2.add(bt2 = new Button("Connect")); bt2.setVisible(false); // ActionListener hinzufuegen bt1.addActionListener(this); bt2.addActionListener(this); Cbox1.addItemListener(this); Cbox2.addItemListener(this); // WindowListener hinzufuegen addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); } }); } //Button Event public void actionPerformed(ActionEvent ae) { Object quelle = ae.getSource(); if (quelle == bt1) { String a = Pw1.getText(); String b = Pw2.getText(); String c = "test"; String d = "test"; if (a.equals© && b.equals(d)) { // altes panel unsichtbar machen panel.setVisible(false); panel.removeAll();; //größe anpassen und neus panel hinzufügen und sichtbar machen setSize(280,200); add(panel2); panel2.setVisible(true); //?? this.repaint(); //?? panel2.repaint(); //?? } else { bt1.setLabel("BAD"); } panel2.setVisible(true); //?? this.repaint(); //?? panel2.repaint(); //?? } if (quelle == bt2) { bt2.setBackground(Color.red); bt2.setLabel("Verarbeite"); connect(); } } //Chkbox Event public void itemStateChanged(ItemEvent e) { if (Cbox1.getState() == true && Cbox2.getState() == true) { bt2.setVisible(true); } } public void connect() { try { Client Cl = new Client(); } catch (Exception e) { e.printStackTrace(System.out); } } /**************** * Startpunkt * ***************/ public static void main(String[] args) { Frame rahmen = new Dialog1(); rahmen.setVisible(true); } } Zitieren
Pinhead Geschrieben 3. März 2004 Geschrieben 3. März 2004 Versuche doch mal this.pack();. Bei dieser Methode nehmen sich die Objekte soviel Platz wie sie brauchen und das Fenster wird neu gezeichnet. Vielleicht hilft das. Zitieren
Sathoan Geschrieben 3. März 2004 Autor Geschrieben 3. März 2004 Hey, das war´s schon! Danke! Aber woher das Prob nun kam verstehe ich immer noch nicht - die größe des Fensters war doch mehr als ausreichend! Und auch wenn ich es kleiner mache wird der Inhalt doch immer noch angezeigt! Zitieren
Pinhead Geschrieben 3. März 2004 Geschrieben 3. März 2004 Genau kann ich dir das auch nicht erklären. Ich weiß nur das ich meinen Fenstern auch immer die pack Methode aufgerufen habe, wenn ich da irgendwelche Größen geändert habe oder Sachen unsichtbar gemacht habe. Aber man muss ja auch nicht alles verstehen. Hauptsache ist doch das es funktioniert Zitieren
Oortael Geschrieben 8. März 2004 Geschrieben 8. März 2004 mit der methode setVisible() setzt du nur ob es sichtbar sein soll oder nicht. Aber wie Pinhead schon sagte: Original geschrieben von Pinhead Versuche doch mal this.pack();. Bei dieser Methode nehmen sich die Objekte soviel Platz wie sie brauchen und das Fenster wird neu gezeichnet. Vielleicht hilft das. zeichnet setVisible() das Fenster nicht neu sondern pack() tut das für dich. Du kannst pack() auch weglassen, dann musst du dir eine andere Methode suchen, die dir das Fenster neu zeichnet. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.