Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 20

Hybrid View

  1. #1
    Piccolo esempio fatto:

    #Main
    codice:
    
    public class ChangeLook {
    
    
      public static void main(String[] args) {
       
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    TestFrame frame = new TestFrame();     
                    try {
                        for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                            if ("Nimbus".equals(info.getName())) {
                                    UIManager.setLookAndFeel(info.getClassName());
                                    break;
                            }
                            
                        }
                    } 
                    catch (Exception e) {}
                    javax.swing.SwingUtilities.updateComponentTreeUI(frame);
                       frame.setVisible(true);
                }
            });
          }   
    }




    #TestFrame
    codice:
    public class TestFrame extends JFrame implements ActionListener{
        
        private JMenuItem stretch, select, normal, none;
        private JPopupMenu popup;
    
    
        private JPanel panel, choosedPanel;
        
        public TestFrame(){
            super("Test");
            panel=new JPanel();
            choosedPanel =new JPanel();
             UIManager.LookAndFeelInfo looks[] = UIManager.getInstalledLookAndFeels();
            for (int i = 0, n = looks.length; i < n; i++) {
              JButton button = new JButton(looks[i].getName());
              button.setActionCommand(looks[i].getClassName());
              button.addActionListener(this);
              panel.add(button);
            }
            
             popup=new JPopupMenu();
             
            select=new JMenuItem("Scegli...");
            none=new JMenuItem("Cancella");
            stretch= new JMenuItem("Adatta");
            normal=new JMenuItem("Normale");
            
            popup.add(select);
            popup.add(none);
            popup.add(stretch);
            popup.add(normal);
            
            
            choosedPanel.setComponentPopupMenu(popup);
            
                    
            
            this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);                
            this.add(choosePanel, BorderLayout.CENTER);
            this.add(panel, BorderLayout.SOUTH);
            this.setSize(400, 150);
        }
        
        
        
        
        public void actionPerformed(ActionEvent e) {
            String lafClassName = null;
            lafClassName = e.getActionCommand();
            String finalLafClassName = lafClassName;
            try {
                UIManager.setLookAndFeel(finalLafClassName);
                SwingUtilities.updateComponentTreeUI(this);
            } 
            catch (Exception ex) {
                ex.printStakeTrace();
            }
    
    
        }    
    }
    Ho notato che facendo scendere il menù a tendina in Nimbus (il primo che viene applicato) cliccando più volte tra Nimbus, CDE Motif e Windows e anche metal (aprendo di volta in volta il popup) randomicamente dà ancora quell'errore. (bisogna avere un po di pazienza a me lo dà sempre)

    La cosa strana è che mi succede solo in Eclipse, in ambienti di sviluppo meno rinomati il problema non sussiste.

    Grazie,
    Ciao.
    Ultima modifica di schumy2000; 11-03-2014 a 18:46
    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

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da schumy2000 Visualizza il messaggio
    Ho notato che facendo scendere il menù a tendina in Nimbus (il primo che viene applicato) cliccando più volte tra Nimbus, CDE Motif e Windows e anche metal (aprendo di volta in volta il popup) randomicamente dà ancora quell'errore. (bisogna avere un po di pazienza a me lo dà sempre)

    La cosa strana è che mi succede solo in Eclipse, in ambienti di sviluppo meno rinomati il problema non sussiste.
    Guarda, stasera a casa provo volentieri questo tuo codice e ti dico. Una cosa però posso dirtela subito. Il cambio del L&F non andrebbe fatto direttamente nel contesto della gestione di un evento, es. actionPerformed. L'evento deve prima terminare e poi è possibile fare il cambio. In pratica è necessario usare il solito invokeLater per dispacciare nel EDT un Runnable che esegue materialmente il cambio del L&F.

    Non è una cosa che mi sono inventato io .... tra l'altro questo è descritto nel libro "The Definitive Guide to Java Swing Third Edition" di John Zukowski.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Beh ti credo...non c'è bisogno che mi citi anche le fonti
    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

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ho provato il tuo codice, oltre a mettere gli import ho solo dovuto fare qualche piccola correzione perché subito non compilava nemmeno.
    Comunque sono stato almeno una decina di minuti a fare prove. Ho provato un po' di tutto, sia provando più pulsanti in sequenza e poi il menù di popup, sia intervallando il popup ai pulsanti. Ho anche provato a riavviare l'applicazione più volte.
    Non mi ha mai dato alcun problema/eccezione, neanche 1 volta.

    La mia JVM è:
    java version "1.7.0_45"
    Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
    Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

    su Windows 7 64bit Ultimate

    Magari potrebbe essere un baco della tua JVM (?)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    in due computer diversi?!?
    mmmhhhh...cmq è strana sta situazione...
    si avevo sbagliato a mettere la viaribile di choosedPanel per questo non compilava
    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

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da schumy2000 Visualizza il messaggio
    in due computer diversi?!?
    Se hanno la stessa versione della JVM... perché no?
    Che jvm usi?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ho fatto alcune prove anch'io su tre macchine diverse:


    Windows 7 64 bit
    java version "1.7.0_17"
    Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
    Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)


    Nessuna NPE, nulla da rilevare.




    Windows Server 2003 SP2 32 bit
    java version "1.6.0_24"
    Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
    Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)

    Nessuna NPE.
    Da rilevare un comportamento particolare per il JPopupMenu: dopo aver aperto il menu, posso cambiare L&F senza che questo venga chiuso al clic del mouse.
    Questo comporta la seguente cosa: se cambio L&F con il popup chiuso, alla successiva apertura, il popup si presenta con l'ultimo L&F con cui è stato aperto (quindi, la prima volta si presenterà sempre con il L&F di default, indipendentemente da quale L&F io abbia impostato al momento); se, invece, cambio il L&F con il popup aperto, il popup cambia L&F immediatamente e questo nuovo L&F sarà presentato ad ogni sua successiva riapertura (indipendentemente da quale sia il L&F selezionato al momento).
    Questo comportamento risulta "strano" agli occhi dell'utente; il motivo è già stato detto da andbin: se il JPopup è chiuso, il sistema non sa nulla della sua esistenza (perchè non è "agganciato" al TreeUI), quindi il cambio di L&F non ha effetto su di lui.




    Windows XP SP3 32 bit
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (buind 1.7.0_51-b13)
    Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode, sharing)

    Nessuna NPE, nulla da rilevare.


    In conclusione, credo che il "difetto" dipenda dalla versione della JVM usata.


    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

  8. #8
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    ....Questo comportamento risulta "strano" agli occhi dell'utente; il motivo è già stato detto da andbin: se il JPopup è chiuso, il sistema non sa nulla della sua esistenza (perchè non è "agganciato" al TreeUI), quindi il cambio di L&F non ha effetto su di lui....
    E forse è proprio questo il problema...anche andando a fare SwingUtilities.updateComponentTreeUI(this) non lo va a rilevare.

    Cmq lavoravo ancora con la versione 1.6

    Passando alla versione 1.7 il baco di è scomparso.

    Mi sa continuerò con l'ultima versione, spero di non rilevare problemi nel passaggio all'ultima versione della JVM.

    Grazie,
    Ciao.
    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
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Sì, credo ci possa essere qualcosa, ma a livello di JVM.
    Perchè io, comunque, ho compilato con la 6, mentre uso la 7 come JRE.


    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

  10. #10
    Si infatti anch'io faccio così adesso.
    JDK 1.6 per la compilazione
    JRE 1.7 per l'esecuzione


    Grazie mille a tutti.

    Ciao
    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

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 © 2026 vBulletin Solutions, Inc. All rights reserved.