Visualizzazione dei risultati da 1 a 10 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

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.