Nie za bardzo potrafię ogarnąć co chcesz robić w swoim kodzie. Dlatego napisałem swój kod, w którym dodaję do panelu wcześniej utworzone buttony (nie dodane do panelu) przechowywane w tablicy.
Oto kod:
Klasa Main:
Kod:
package DodawaniePrzycisku;
/**
*
* @author xiom
*/
public class Main {
public static void main(String[] args) {
Okno ok = new Okno();
ok.setDefaultCloseOperation(3);
ok.setVisible(true);
}
}
Klasa Panel:
Kod:
package DodawaniePrzycisku;
import java.awt.event.ActionListener;
import javax.swing.*;
/**
*
* @author xiom
*/
public class Panel extends JPanel {
JButton dodaj;
public Panel(ActionListener myl) {
dodaj = new JButton("dodaj");
dodaj.setBounds(10, 10, 50, 100);
dodaj.addActionListener(myl);
add(dodaj);
}
}
Klasa Okno:
Kod:
package DodawaniePrzycisku;
import java.awt.event.*;
import javax.swing.*;
/**
*
* @author xiom
*/
public class Okno extends JFrame {
Panel panel;
JButton[] tab;
int ostatni;
public Okno() {
setBounds(50, 50, 500, 500);
ostatni=0;
panel = new Panel(new MyListener());
add(panel);
tab = new JButton[10];
tab[0] = new JButton("button0");
tab[0].setBounds(10, 10, 120, 20);
tab[1] = new JButton("button1");
tab[1].setBounds(10, 40, 120, 20);
tab[2] = new JButton("button2");
tab[2].setBounds(10, 70, 120, 20);
tab[3] = new JButton("button3");
tab[3].setBounds(10, 100, 120, 20);
tab[4] = new JButton("button4");
tab[4].setBounds(10, 130, 120, 20);
tab[5] = new JButton("button5");
tab[5].setBounds(10, 160, 120, 20);
}
class MyListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == panel.dodaj) {
panel.add(tab[ostatni]);
ostatni++;
repaint();
}
}
}
}
Oczywiście wszystko możesz napisać w jednej klasie. Ja po prostu mam taki styl pisania.