Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480

    Inserire immagine e testo in JOptionPane

    Ciao a tutti
    ho creato un JOptionPane in questo modo
    codice:
    int replyRadiationGuide = JOptionPane.showConfirmDialog(null, messageRadiationGuide, "Confirm", JOptionPane.YES_NO_OPTION);
                            if (replyRadiationGuide == JOptionPane.YES_OPTION) {
                                
                                final ImageIcon icon = new ImageIcon(".\\src\\immagini\\irradiationguide.jpg");
                                JOptionPane.showMessageDialog(null,"Testo","", JOptionPane.INFORMATION_MESSAGE,icon);
    
                            }
    ed ho inserito una immagine. ora vorrei inserire un testo al di sotto dell'immagine (non al lato come ora)

    E' possibile farlo ?

    Grazie

  2. #2
    credo di no.
    Forse fai prima a crearti una tua JDialog che abbia il comportamento da te desiderato.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    ora vorrei inserire un testo al di sotto dell'immagine (non al lato come ora)

    E' possibile farlo ?
    Il parametro 'message' tecnicamente è un Object, perché può essere tante cose ed è interpretato in base a quello che viene passato:
    - un Component (qualunque dei componenti grafici)
    - un Icon
    - un altro oggetto (vale il String dal toString(), wrappato in JLabel automaticamente e visualizzato)
    - un Object[] che contiene qualunque dei tre precedenti, arrangiati in verticale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Ho fatto in questo modo:
    codice:
    int replyRadiationGuide = JOptionPane.showConfirmDialog(null, messageRadiationGuide, "Confirm", JOptionPane.YES_NO_OPTION);
                                if (replyRadiationGuide == JOptionPane.YES_OPTION) {
    
                                    final ImageIcon icon = new ImageIcon(".\\src\\immagini\\irradiationguide.png");
                                    JOptionPane.showMessageDialog(null,
                                             "1. You have to select the database of radiation (in this case you have  chosen " + database + ")\n"
                                            + "2. You have to select the option 'Optimize slope'\n"
                                            + "3. You have to select 'Text file'\n"
                                            + "4. You must click on 'Calculate'", "Message", JOptionPane.INFORMATION_MESSAGE, icon);
    
                                }
    Il testo viene lateralmente all'immagine, non credo sia male però, posso sempre modificarlo più in là

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Sto provando ad inserire in questo modo:
    codice:
    ....
            JLabel label = new JLabel();
            label.setIcon(new ImageIcon(".\\src\\immagini\\irradiationguide.png"));
            getContentPane().add(label, JLabel.TOP);
            JLabel label0 = new JLabel();
            label0.setText(new String ("Titolo"));
            getContentPane().add(label0, JLabel.BOTTOM);
    ....
    per mettere i due elementi uno sotto l'altro ma mi segnala un errore:
    codice:
    Exception in thread "main" java.lang.IllegalArgumentException: illegal component position
        at java.awt.Container.addImpl(Container.java:1085)
        at java.awt.Container.add(Container.java:465)
        at pvestimation.MyJDialog.<init>(MyJDialog.java:45)
        at pvestimation.MyJDialog.main(MyJDialog.java:102)
    Java Result: 1
    Potete dirmi dove sbaglio ?

    Grazie

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    JLabel.TOP e JLabel.BOTTOM sono due costanti di JLabel (che non c'entrano nulla con i contenitori grafici), che servono, rispettivamente, ad indicare la posizione verticale del testo all'interno della JLabel (allineato in alto, in basso o al centro).

    Ovviamente, tale valore non ha alcun senso per il Container.
    Un Container posiziona i componenti secondo le regole dettate dal LayoutManager. A seconda di quale LayoutManager viene usato, ci possono (o meno) essere determinati "constraint" da passare a quel parametro. Ad esempio, se si usa un BorderLayout, si può decidere di posizionare il componente in uno dei suoi 5 "scomparti": BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.WEST, BorderLayout.EAST, BorderLayout.CENTER.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Ho fatto così:
    codice:
    getContentPane().setLayout(new BorderLayout());
            JLabel label = new JLabel();
            label.setIcon(new ImageIcon(".\\src\\immagini\\irradiationguide.png"));
            getContentPane().add(label, BorderLayout.NORTH);
            JLabel label0 = new JLabel();
            label0.setText(new String ("Titolo"));
            getContentPane().add(label0, BorderLayout.SOUTH);
    e mi visualizza l'immagine (in alto a sinistra) ma NON il "Titolo"...

  8. #8
    infatti il titolo te lo mette sotto:
    getContentPane().add(label0, BorderLayout.SOUTH);

    Prova a mettere il titolo a NORTH e l'immagine al centro


    codice:
    //getContentPane().setLayout(new BorderLayout()); questo non serve lo usi già  in maniera statica
            JLabel label = new JLabel();
            label.setIcon(new ImageIcon(".\\src\\immagini\\irradiationguide.png"));
            getContentPane().add(label, BorderLayout.CENTER);
            JLabel label0 = new JLabel();
            label0.setText(new String ("Titolo"));
            getContentPane().add(label0, BorderLayout.NORTH);
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Ho scelto quest'altra soluzione:
    codice:
     if (replyRadiationGuide == JOptionPane.YES_OPTION) {
    
                                
                                JPanel panel = new JPanel();
                                panel.setLayout(new BorderLayout());
                                JLabel label = new JLabel();
                                label.setIcon(new ImageIcon(".\\src\\immagini\\irradiationguide.png"));
                                panel.add(label, BorderLayout.PAGE_START);
                                label.setHorizontalAlignment(SwingConstants.CENTER);
                                JLabel label0 = new JLabel();
                                String messaggio = new String("1. Messaggio1 ")\n"
                                        + "2. Messaggio2'\n"
                                        + "3. Messaggio3'\n"
                                        + "4. Messaggio4");
                                label0.setText(messaggio);
                                panel.add(label0, BorderLayout.CENTER);
                                label0.setHorizontalAlignment(SwingConstants.CENTER);
                                panel.setSize(400, 600);
    
                               
                                JFrame frame = new JFrame("JOptionPane showMessageDialog component example");
                                JOptionPane.showMessageDialog(frame, panel);
    
                            }
    ma ho il problema del messaggio che viene scritto su un'unica riga mente io vorrei che andasse a capo..come posso fare ?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Ho scelto quest'altra soluzione:
    codice:
     if (replyRadiationGuide == JOptionPane.YES_OPTION) {
    
                                
                                JPanel panel = new JPanel();
                                panel.setLayout(new BorderLayout());
                                JLabel label = new JLabel();
                                label.setIcon(new ImageIcon(".\\src\\immagini\\irradiationguide.png"));
                                panel.add(label, BorderLayout.PAGE_START);
                                label.setHorizontalAlignment(SwingConstants.CENTER);
                                JLabel label0 = new JLabel();
                                String messaggio = new String("1. Messaggio1 ")\n"
                                        + "2. Messaggio2'\n"
                                        + "3. Messaggio3'\n"
                                        + "4. Messaggio4");
                                label0.setText(messaggio);
                                panel.add(label0, BorderLayout.CENTER);
                                label0.setHorizontalAlignment(SwingConstants.CENTER);
                                panel.setSize(400, 600);
    
                               
                                JFrame frame = new JFrame("JOptionPane showMessageDialog component example");
                                JOptionPane.showMessageDialog(frame, panel);
    
                            }
    ma ho il problema del messaggio che viene scritto su un'unica riga mente io vorrei che andasse a capo..come posso fare ?
    Ho trovato questa soluzione alternativa:
    codice:
     if (replyRadiationGuide == JOptionPane.YES_OPTION) {
    
                                // create a simple jpanel
                                JPanel panel = new JPanel();
                                panel.setLayout(new BorderLayout());
                                JLabel label = new JLabel();
                                label.setIcon(new ImageIcon(".\\src\\immagini\\irradiationguide.png"));
                                panel.add(label, BorderLayout.PAGE_START);
                                label.setHorizontalAlignment(SwingConstants.CENTER);
                                JLabel label1 = new JLabel();
                                JLabel label2 = new JLabel();
                                String messaggio1 = new String("1. Messaggio1")\n");
                                String messaggio2 = new String("2. Messaggio2\n");
                                        
                                label1.setText(messaggio1);
                                panel.add(label1, BorderLayout.CENTER);
                                label1.setHorizontalAlignment(SwingConstants.CENTER);
                                label2.setText(messaggio2);
                                panel.add(label2, BorderLayout.AFTER_LAST_LINE);
                                label2.setHorizontalAlignment(SwingConstants.CENTER);
                                panel.setSize(400, 600);
    
                                // display the jpanel in a joptionpane dialog, using showMessageDialog
                                JFrame frame = new JFrame("JOptionPane showMessageDialog component example");
                                JOptionPane.showMessageDialog(frame, panel);
    
                            }
    Conoscete un'altra soluzione ?

    Grazie

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.