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.