Comenzando con el swing

Incrementando con un botón

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/**
 * A very simple Swing example.
 */
public class SwingExample {
    /**
     * The number of times the user has clicked the button.
     */
    private long clickCount;
    
    /**
     * The main method: starting point of this application.
     *
     * @param arguments the unused command-line arguments.
     */
    public static void main(final String[] arguments) {
        new SwingExample().run();
    }

    /**
     * Schedule a job for the event-dispatching thread: create and show this
     * application's GUI.
     */
    private void run() {
        SwingUtilities.invokeLater(this::createAndShowGui);
    }
    
    /**
     * Create the simple GUI for this application and make it visible.
     */
    private void createAndShowGui() {
        // Create the frame and make sure the application exits when the user closes
        // the frame.
        JFrame mainFrame = new JFrame("Counter");
        mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        
        // Add a simple button and label.
        JPanel panel = new JPanel();
        JButton button = new JButton("Click me!");
        JLabel label = new JLabel("Click count: " + clickCount);
        panel.add(button);
        panel.add(label);
        mainFrame.getContentPane().add(panel);
        
        // Add an action listener to the button to increment the count displayed by
        // the label.
        button.addActionListener(actionEvent -> {
            clickCount++;
            label.setText("Click count: " + clickCount);
        });
        
        // Size the frame.
        mainFrame.setBounds(80, 60, 400, 300);
        //Center on screen
        mainFrame.setLocationRelativeTo(null);
        //Display frame
        mainFrame.setVisible(true);
    }
}

Resultado

Como el botón con la etiqueta “¡Haz clic en mí!” se presiona, el número de clics aumentará en uno:

Programa en ejecución

“¡Hola Mundo!” en el título de la ventana con compatibilidad

Usando java.lang.Runnable hacemos nuestro “¡Hola mundo!” ejemplo disponible para usuarios de Java con versiones que se remontan a la versión 1.2:

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class Main {
    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable(){

            @Override
            public void run(){
                JFrame frame = new JFrame("Hello World!");
                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame.setSize(200, 100);
                frame.setVisible(true);
            }
        });
    }
}

“¡Hola Mundo!” en el título de la ventana con lambda

import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public class Main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("Hello World!");
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.setSize(200, 100);
            frame.setVisible(true);
        });
    }
}

Dentro del método main:
En la primera línea se llama SwingUtilities.invokeLater y se le pasa una expresión lambda con un bloque de código () -> {...}. Esto ejecuta la expresión lambda pasada en el EDT, que es la abreviatura de Event Dispatch Thread, en lugar del hilo principal. Esto es necesario, porque dentro del bloque de código de la expresión lambda, se crearán y actualizarán componentes Swing.

Dentro del bloque de código de la expresión lambda:
En la primera línea, se crea una nueva instancia de JFrame llamada frame utilizando new JFrame("Hello World!"). Esto crea una instancia de ventana con “¡Hola mundo!” en su título. Luego, en la segunda línea, el marco se configura en EXIT_ON_CLOSE. De lo contrario, la ventana simplemente se cerrará, pero la ejecución del programa permanecerá activa. La tercera línea configura la instancia de frame para que tenga 200 píxeles de ancho y 100 píxeles de alto usando el método setSize. Hasta ahora, la ejecución no mostrará nada en absoluto. Solo después de llamar a setVisible(true) en la cuarta línea, la instancia frame está configurada para aparecer en la pantalla.