timt: Swing Komponente bei Knopfdruck hinzufügen?

Hallo,

also ich hab einen JButton den ich mit einem ActionListener verbunden habe. Nun will ich eine Komponente (z.b ein JLabel) zu meiner GUI hinzufügen.

Aber wenn ich z.b die add() Methode eines JPanels benutze um die Komponente hinzu zufügen funktioniert das Leider nicht. Kann mir jemand weiterhelfen? Finde dazu keine brauchbaren Informationen.

Danke!

  1. Hallo,

    Aber wenn ich z.b die add() Methode eines JPanels benutze um die Komponente hinzu zufügen funktioniert das Leider nicht.

    Und wie äußert sich das Nicht-Funktionieren? Erscheint es nicht? Gibt es eine
    Fehlermeldung? Wird irgendwas überschrieben?

    Ein relevantes Code-Stück wäre auch gut.

    Gruß
    Slyh

    1. Hallo,

      Aber wenn ich z.b die add() Methode eines JPanels benutze um die Komponente hinzu zufügen funktioniert das Leider nicht.

      Und wie äußert sich das Nicht-Funktionieren? Erscheint es nicht? Gibt es eine
      Fehlermeldung? Wird irgendwas überschrieben?

      Es passiert einfach nichts....

      Ein relevantes Code-Stück wäre auch gut.

      Ok hier mal mein komplettes Programm:

      import java.awt.FlowLayout;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;

      import javax.swing.*;

      public class Test3  extends JFrame implements ActionListener{

      private JPanel panel1;
       private JButton button;
       public Test3(){
        super("test");

      panel1 = new JPanel();

      panel1.add(new JLabel("abc"));
        button = new JButton("ok");
        button.addActionListener(this);
        panel1.add(button);

      add(panel1);

      pack();
        setVisible(true);
       }

      public void actionPerformed(ActionEvent event){
        panel1.add(new JLabel("asdfjl"));

      }

      public static void main(String[] args){
        new Test3();
       }

      }

      1. Hallo,

        public void actionPerformed(ActionEvent event){
          panel1.add(new JLabel("asdfjl"));
        }

        Füge mal noch diese Zeile nach dem Hinzufügen ein:

        panel1.revalidate();

        Wenn das nicht reicht, dann noch ein

        panel1.repaint();

        Gruß
        Slyh

        1. Hallo,

          public void actionPerformed(ActionEvent event){
            panel1.add(new JLabel("asdfjl"));
          }

          Füge mal noch diese Zeile nach dem Hinzufügen ein:

          panel1.revalidate();

          Wenn das nicht reicht, dann noch ein

          panel1.repaint();

          Gruß
          Slyh

          Habe beide eingefügt... aber funktioniert trotzdem ledier nicht...

          1. Moin.

            Füge mal noch diese Zeile nach dem Hinzufügen ein:

            panel1.revalidate();

            Habe beide eingefügt... aber funktioniert trotzdem ledier nicht...

            Bei mir funktioniert es mit revalidate() - was man aber nicht sieht, da das Fenster nicht automatisch mitvergrößert wird, das Label also außerhalb des Anzeigebereichs liegt (einfach mal das Fenster vergrößerst, dann solltest du dein Label sehen). Automatische Größenanpassung geht mit pack() - dann kannst du dir das revalidate() sparen...

            Christoph