Establecer JLabel Visible cuando se hace clic en JButton en actionPerformed

Estoy intentando que aparezca un JLabel cuando se hace clic en un JButton. Agregué un oyente de acción y agregué el componente al diseño. Estoy usando label1.setVisible (true) cuando se hace clic en JButton en actionPerformed. Todavía no puedo hacer que funcione. ¿Pueden algunos mirar mi código?

public class LearnAppMain extends JFrame implements ActionListener {

// Define variables
public JButton button1;
public JLabel label1;
    public JTextField field1;

    private Image image1;
private String apple = "apple.jpg";

public LearnAppMain() {

    ImageIcon image1 = new ImageIcon(this.getClass().getResource(apple));
    JLabel label1 = new JLabel(image1);

    button1 = new JButton("A");
    button1.addActionListener(this);

    field1 = new JTextField(10);

    // Create layout
    setLayout(new FlowLayout());

    // create Container
    final Container cn = getContentPane();

    cn.add(button1);
    cn.add(field1);
    cn.add(label1);

    // setLayout(new FlowLayout());
    setSize(250, 250);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {

    Object source = e.getSource();

    if (e.getSource() == button1) {
        label1.setVisible(true);
        field1.setText("Apple");
    }

}

 }

Tengo mi método principal en otro archivo de clase. El error que recibo me lleva a label1.setVisible (true);

Cada pregunta que he visto dicen que hacen esto, pero me pregunto si hay algo más que deba agregarse.

Respuestas a la pregunta(6)

Su respuesta a la pregunta