code: import java.awt.BorderLayout;
  import java.awt.Dimension;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JLabel;
  import javax.swing.SwingUtilities;
  public class Clicks extends JFrame{
  	private long clicks = 0;
  
  	public Clicks(){
  		super("Clicks");//set window title
  		JLabel label = new JLabel("There have been no clicks yet");
  		JButton clicker = new JButton("click me");
  		clicker.addActionListener(//listen to the button
  			new ActionListener(){
  				@Override
  				public void actionPerformed(ActionEvent e) {
  					label.setText("There have been " + (++clicks) + " clicks");//change the text
  				}
  			}
  		);
  		setLayout(new BorderLayout());//handles placement of components
  		add(label,BorderLayout.CENTER);//add the label to the biggest section
  		add(clicker,BorderLayout.SOUTH);//put the button underneath it
  		label.setPreferredSize(new Dimension(300,100));//nice big label
  		label.setHorizontalAlignment(JLabel.CENTER);//text not up against the side
  		pack();//fix layout
  		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//stop the program on "X"
  		setVisible(true);//show it
  	}
  	public static void main(String[] args){
  		SwingUtilities.invokeLater( //Swing UI updates should not happen on the main thread
  			() -> new Clicks() //call the constructor where all the magic happens
  		);
  	}
  }
  