Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    655

    JOptionPane + sezione Dettagli

    Ciao a tutti, nel mio progetto java gestisco le eccezioni dando avviso all'utente di cosa si è verificato utilizzando un

    codice:
                            JOptionPane.showMessageDialog(this, "Si è verificato un Errore", "Errore", JOptionPane.WARNING_MESSAGE);
    vorrei però aggiungere al JOptionPane una sezione "Dettagli" nascosta, che mostri tutti i dettagli dell'errore
    codice:
    System.out.println("exception: " + e.getMessage());
    per intenderci. Propio come fa Windows.

    Qualcuno saprebbe darmi alcune delucidazioni in merito??

    Grazie mille!!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JOptionPane + sezione Dettagli

    Originariamente inviato da melmar20
    vorrei però aggiungere al JOptionPane una sezione "Dettagli" nascosta, che mostri tutti i dettagli dell'errore
    codice:
    System.out.println("exception: " + e.getMessage());
    Se hai già avuto modo di farci caso, il parametro 'message' dei vari metodi showXXX() è un Object. Non gestisce solo stringhe in String .... può gestire anche Component, Icon o altri oggetti (di cui usa toString()) o ancora un array Object[] che contiene ricorsivamente gli oggetti appena menzionati.

    Quindi come "message" potresti mettere es. un pannello (con dentro tutto ciò che vuoi), o più label in un array (saranno messe una sotto l'altra) o altro ancora.
    E supporta anche \n nelle stringhe per fare più righe.

    Lo spiega bene la documentazione javadoc di JOptionPane all'inizio dove parla dei Parameters:
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    655
    Questa soluzione l'avevo pensata, ma non l'ho portata a termine perchè io vorrei che i dettagli fossero nascosti e farli comparire solo se l'utente decide di visionarli. Se aggiugno ad esempio un pannello al JOptionPane composta da una TextArea dove far comparire i dettagli dell'errore , la JOptionPane non si espande al clic sul bottone dettagli, al massimo posso far comparire la TextArea utilizzando l'opzione setVisible(true).

    Non so se sono riuscito a spiegarmi

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.