Los botones son el elemento gráfico por excelencia dentro de una interfaz gráfica. En swing este elemento se representa mediante la clase JButton. Su constructor tiene 4 posibilidades

botonInicial1 = new JButton();
botonInicial2 = new JButton("Botón 2");
botonInicial3 = new JButton(new ImageIcon(getClass().getResource("/resources/duke.png")));
botonInicial4 = new JButton("Botón 4", new ImageIcon(getClass().getResource("/resources/duke2.png")));

Algunos de los métodos que se pueden ejecutar para los botones son:

botonInicial3.setVisible(true);
botonInicial3.setAlignmentY(JButton.BOTTOM);
botonInicial3.setAlignmentX(JButton.LEFT);
botonInicial3.setPreferredSize(new Dimension(100,100));
botonInicial3.setBorder(BorderFactory.createTitledBorder(null, "Borde botón"));
botonInicial3.setBorderPainted(true);
botonInicial3.setText("Ejemplo");
botonInicial3.setForeground(null);
botonInicial3.setFont(new Font("Arial", Font.ITALIC, 10));
botonInicial3.setFocusable(true);
botonInicial3.setEnable(true);

Manejo de eventos

La principal función de un botón es la de ser pulsado por lo que ese será su principal evento. Se crea mediante el método addActionListener y su método actionPerformer ejecutado cuando el botón se pulse

botonInicial3.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        
    }
});

A traves del objeto ActionEvent se puede obtener información sobre el origen del propio evento con métodos como getSource(). Además de este este evento se puede manejar otro como por ejemplo FocusListener para cuando el elemento es seleccionado o deseleccionado, MouseListener para evaluar cuando el ratón pasa por encima o sale, etc…

botonInicial3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
                System.out.println(((JButton)e.getSource()).getText());
            }
        });

botonInicial3.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
                botonInicial3.setIcon(new ImageIcon(getClass().getResource("/resources/duke2.png")));
                botonInicial3.setBorder(BorderFactory.createTitledBorder(null,"pulsado"));

            }

@Override
public void focusLost(FocusEvent e) {
                botonInicial3.setIcon(new ImageIcon(getClass().getResource("/resources/duke.png")));
                botonInicial3.setBorder(null);

            }
        });

botonInicial3.addMouseListener(new MouseAdapter() {
@Override
            public void mouseEntered(MouseEvent e) {
                super.mouseEntered(e);
                botonInicial3.setBorder(BorderFactory.createTitledBorder(null,"Sobre"));
            }

@Override
public void mouseExited(MouseEvent e) {
                super.mouseExited(e);
                botonInicial3.setBorder(null);

            }
        });

ToggleButton

Se trata de un tipo de botón el cual tiene dos estados: seleccionado o deseleccionado. En el constructor hay que indicar el texto, icono y si está o no seleccionado

JToggleButton toggleButton = new JToggleButton("Deseleccionado",false);

Los métodos que se utilizan son exactamente iguales que en el objeto JButton pero se le añaden aquellos que pueden obtener el estado del elemento. Para eso se utiliza el método isSelected().

Manejo de eventos

Para poder evaluar si un togglebutton está seleccionado se utiliza el listener itemlistener mediante el método addItemListener. Obteniendo información del objeto ItemEvent se evalúa el estado del componente:

toggleButton.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange()==ItemEvent.SELECTED){
            toggleButton.setText("Seleccionado");
            toggleButton.setIcon(new ImageIcon(getClass().getResource("/resources/duke.png")));

        }
        else{
            toggleButton.setText("Deseleccionado");
            toggleButton.setIcon(new ImageIcon(getClass().getResource("/resources/duke2.png")));

        }
    }
});

Button Group

No se trata de un elemento como tal, sino de un contenedor de elementos para que no más de uno de los pertenecientes al grupo pueda estar seleccionado al mismo tiempo. Para ello se utiliza el método add para añadir componentes al gurpo

ButtonGroup grupoBotones = new ButtonGroup();
grupoBotones.add(botonInicial1);
grupoBotones.add(botonInicial2);
grupoBotones.add(botonInicial3);