I have a JFrame with a grid of JPanels (using Borderlayout). Each JPanel holds a JButton (that expands to full size because is inside a Borderlayout). So I have something like a minesweeper.
Those buttons have a listener, with the constructor Listener(panel), so i can use the panel from the listener.
If I do panel.removeAll(); in the listener then the button disappears, but the JPanel remains, so i get a free space.
I do panel.setBackground(Color.pink); and it works, but if i want to add a component, such another button or a JLabel, it doesn't work. It works in the same class but not apart, or in a method of the class.
Thank you. Hope you can understand!
Here it is my listener class:
public class ListenerCasillas implements ActionListener {
    JPanel panel;
    ListenerCasillas(JPanel panel){
    this.panel = panel;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        panel.removeAll();//works
        panel.setBackground(Color.green);//works
        panel.add(new JLabel("1"));//doesn't work
        panel.repaint();//works
    }
}
And here it is the class that creates the grid:
public class Game extends JFrame {
    Game(){
        super("MineSweeper 0.0");
        setLocation(300, 300);
        setResizable(false);
        setLayout(new GridLayout(mainclass.rows, mainclass.cols));
        Dimension d = new Dimension(30, 30);
        for(int i = 0; i < mainclass.rows; i++){
            for(int j = 0; j < mainclass.cols; j++){
                JPanel panel = new JPanel();
                panel.setLayout(new BorderLayout());
                panel.setPreferredSize(d);
                add(panel);
                JButton boton = new JButton();
                boton.addActionListener(new ListenerCasillas(panel));
                panel.add(boton);
            }
        }
        setVisible(true);
        pack();
    }
}
Full java project (if you want to test): https://drive.google.com/file/d/0B0WNwgY4eOjvNmNHM0E5U0FxVGc/view?usp=sharing