tworzenie obiektów w swing

0

Vitam !
Chcę zrobić takie coś że na kliknięcie przycisku pojawi mi się w oknie aplikacji nowy label. Napisałem takie klasy, i nie wiem czemu mi to nie działa. Czy ktoś z szanownych forumowiczów mógłby mi pomóc ? Świadomy jestem że odpowiedź na moje pytanie jest najprawdopodobniej banlna, stąd przeszukiwanie googla nie przyniosło rezultatów.

Mam dwie klasy, pierwsza :

public class Aplikacja extends JFrame {

    Container cp = getContentPane();

    public Aplikacja() {
        cp.setLayout(new FlowLayout());
        cp.add(b);
        b.addActionListener(new Akcje(this));
    }
    
    public static void main(String[] args) {
        Aplikacja o = new Aplikacja();
        o.setBounds(10, 10, 200, 400);
        o.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        o.setVisible(true);
    }
    JButton b = new JButton("przycisk");
}

oraz druga :

public class Akcje implements ActionListener {

    public Akcje(Aplikacja a) {
        app = a;
    }

    public void actionPerformed(ActionEvent e) {
            JLabel p = new JLabel();
            p.setVisible(true);
            p.setSize(10, 10);
            app.cp.add(p);
            app.cp.setLayout(new FlowLayout());
    }
    private Aplikacja app;
}

Pozdrawiam serdecznie :-)

0

Obiekt JLabel bez żadnego tekstu jest niewidoczny.
Instrukcje

    p.setVisible(true);
    app.cp.setLayout(new FlowLayout());

w klasie Akcje sa zbyteczne.

0

Niestety działa mi tylko gdy po dodaniu labela ukryję przycisk.

0

Jeśli masz wersję >=1.5, to korzystanie z getContentPane() nie jest konieczne.

import javax.swing.*;
import java.awt.*;

public class Aplikacja extends JFrame
{

    public Aplikacja()
    {
        setLayout(new FlowLayout());
        add(b);
        b.addActionListener(new Akcje(this));
    }

    public static void main(String[] args) 
   {
        Aplikacja o = new Aplikacja();
        o.setBounds(10,10,400,200);
        o.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        o.setVisible(true);
    }
    JButton b = new JButton("przycisk");
}
import javax.swing.*;
import java.awt.event.*;

public class Akcje implements ActionListener
{

    public Akcje(Aplikacja a)
    {
        app = a;
    }

    public void actionPerformed(ActionEvent e)
    {
        JLabel p = new JLabel("Nowa");
        p.setSize(10, 10);
        app.add(p);
        app.validate(); //tego brakowało
    }
    private Aplikacja app;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1