Ваш код полностью испорчен. Вы создаете экземпляр JPanel p дважды, ваша кнопка объявляется «открытой», но на самом деле «сохраняется». Вы смешиваете GridLayout с ограничениями BorderLayour. Работает следующий код:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class abc extends JFrame {
private JButton save = new JButton("Save");
public abc() {
JPanel p = new JPanel();
save.addActionListener(new SaveL());
p.add(save);
p.setLayout(new GridLayout(2, 1));
add(p);
}
public static void main(String[] args) {
abc abc = new abc();
abc.pack();
abc.setVisible(true);
}
}
class SaveL implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Hello"); // nothing happens
}
}