Возможно, вам будет проще переместить весь код, который есть в main (), в конструктор. Кстати, я также не знаю, почему вы расширяете JFrame, но также создаете новый экземпляр JFrame в своем основном методе. Я думаю, что вы хотите что-то подобное (я не проверял, но это общая идея).
Кстати, вы можете прочитать хорошее руководство по языку Java, чтобы правильно понять, что означает «статический».
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/* implements ActionListener*/
class JFramePaint1 extends JFrame implements ActionListener {
private int activa = 0;
private JButton b = new JButton("b");
JFramePaint1() {
setTitle("Drawing Graphics in Frames");
setSize(800, 650);
setLocation(200, 50);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(new ContentComponent());
getContentPane().add(b);
addWindowListener(this);
addActionListener(this);
}
public static void main(String[] a) {
new JFramePaint1().setVisible(true);
}
class ContentComponent extends JPanel {
public void paint(Graphics g) {
g.setColor(Color.RED);
g.fillRect(0, 40, 800, 650);
if (activa == 1) {
g.setColor(Color.BLACK);
g.drawRect(40, 40, 150, 80);
int x = 40;
int y = 40;
for (int i = 0; i < 4; i++) {
g.drawRect(x + 10, y + 10, 150, 80);
x = x + 10;
y = y + 10;
}
}
}//del paint
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b) {
System.out.println("entro");
}
}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
public void windowOpened(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
}