Originariamente inviato da melmar20
vorrei che i dettagli fossero nascosti e farli comparire solo se l'utente decide di visionarli.
Questo è un esempio:

codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ProvaMessaggio {
    public static void main(String[] args) throws Exception {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                errorMessageBox(null, "messaggio di errore", "Questa è la parte dove " +
                                "ci sono dei dettagli circa l'errore che " +
                                "è avvenuto");
            }
        });
    }

    public static void errorMessageBox(Component parentComponent, String messaggio, String dettagli) {
        JLabel text1 = new JLabel(messaggio);
        final JButton button = new JButton("Mostra dettagli");
        final JLabel text2 = new JLabel(dettagli);
        text2.setVisible(false);

        Object[] msg = { text1, button, text2 };

        JOptionPane optionPane = new JOptionPane(msg, JOptionPane.WARNING_MESSAGE);
        final JDialog dialog = optionPane.createDialog(parentComponent, "Errore");

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (text2.isVisible()) {
                    text2.setVisible(false);
                    button.setText("Mostra dettagli");
                } else {
                    text2.setVisible(true);
                    button.setText("Nascondi dettagli");
                }

                dialog.pack();
            }
        });

        dialog.setVisible(true);
        dialog.dispose();
    }
}
Ed è largamente migliorabile sia come aspetto che come comportamento. Ora continua tu ....

Nota che ho usato "direttamente" JOptionPane, non tramite i showXXX(). Questo perché mi serve il reference al JDialog per farne il pack(). È questo che permette di espandere/ridurre al necessario la dialog.