Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    54

    [Java] Primi passi con awt e swing

    Ciao a tutti, da poco ho inziato il mio primo programmino con un tocco di grafica in java, leggendo qualche guida su swing e awt qua e là in giro.
    Ma a quanto pare ho un problemuccio sull'utilizzo dell' ActionListener:
    In questo programma ho creato dei menu utilizzando Choice , il cui contenuto vorrei poi andare a estrarre con un Bottone, ma ho un problema di una eccezzione java.lang.ClassCastException.

    Ho cercato un pò in giro e a quanto ho capito non posso fare il cast di un java.awt.Button su un java.awt.Choice (me lo diceva nel terminale pure.. bastava leggere )

    Comunque.. voi sapreste aiutarmi? Almeno vorrei solo capire se il programmino che sto costruendo è totalmente sbagliato o se sono vicino alla soluzione .

    Codice:
    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    
    public class ChoiceActionListener extends JFrame {
        public ChoiceActionListener() { 
            initialize();
        }
        
        Choice citta = null,zona=null,tipologia=null;
        private void initialize() {
            setSize(420, 300);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
            Font font = new Font("Verdana", Font.BOLD, 20);
            citta = new Choice();           
            citta.add("Torino");
            citta.add("Nichelino");
            citta.add("Moncalieri");         
            citta.setFocusable(false);
            citta.setFont(font);
            
            
            
            zona = new Choice();
            zona.add("Mirafiori Nord");
            zona.add("Mirafiori Sud");
            zona.add("Lingotto");
            zona.setFocusable(false);
            zona.setFont(font);
           
            
            tipologia = new Choice();
            tipologia.add("Monlocale");
            tipologia.add("Bilocale");
            tipologia.add("Trilocale");
            tipologia.setFocusable(false);
            tipologia.setFont(font);
    
            
           
            
            Button save = new Button("Salva");
            save.setFont(font);
            save.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent event) {
                    //
                    // Get the source of the component, which is our combo box.
                    //
                	citta = (Choice) event.getSource();
                	zona = (Choice) event.getSource();
                    tipologia = (Choice) event.getSource();
    
                    //
                    // Print the selected items and the action command.
                    //
                    String message="";
                    Object obj1 = citta.getSelectedItem();
                    String _citta = obj1.toString();                
                    message +="Città: "+_citta;
                    Object obj2 = zona.getSelectedItem();
                    String _zona = obj2.toString();                
                    message +="Zona: "+_zona;
                    Object obj3 = tipologia.getSelectedItem();
                    String _tipologia = obj3.toString();  
                    message +="Tipologia: "+_tipologia;
                    JOptionPane.showMessageDialog(null, "Hai selezionato " +message);                
                }
                
            });
            
            setLayout(new FlowLayout(FlowLayout.LEFT));
            JTextField tcitta;     
            tcitta = new JTextField("Città",10);
            tcitta.setEditable(false);
            tcitta.setFont(font);
            getContentPane().add(tcitta);
            getContentPane().add(citta);
            JTextField tzona;     
            tzona = new JTextField("Zona",10);
            tzona.setEditable(false);
            tzona.setFont(font);
            getContentPane().add(tzona);
            getContentPane().add(zona);
            JTextField ttipologia;     
            ttipologia = new JTextField("Tipologia",10);
            ttipologia.setEditable(false);
            ttipologia.setFont(font);
            getContentPane().add(ttipologia);
            getContentPane().add(tipologia);
            getContentPane().add(save);
    
            
            
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new ChoiceActionListener().setVisible(true);
                    
                }
            });
        }
    }
    Eccezzione:
    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.awt.Button cannot be cast to java.awt.Choice
    	at ChoiceActionListener$1.actionPerformed(ChoiceActionListener.java:50)
    	at java.awt.Button.processActionEvent(Unknown Source)
    	at java.awt.Button.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)

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

    Re: [Java] Primi passi con awt e swing

    Originariamente inviato da rodfval
    codice:
            Button save = new Button("Salva");
            save.setFont(font);
            save.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent event) {
                    //
                    // Get the source of the component, which is our combo box.
                    //
                	citta = (Choice) event.getSource();
                	zona = (Choice) event.getSource();
                    tipologia = (Choice) event.getSource();
    Lo dice chiaramente il messaggio della eccezione ma è meglio chiarirtelo.

    Il ActionListener l'hai registrato su un Button (quel 'save') e quindi nel ActionEvent il "source" (l'oggetto fornito da getSource() ) è ..... proprio il Button!!! (e proprio quel 'save').

    E visto che tu "sai" che quel ActionListener (essendo una anonymous inner class) è solo per il Button 'save' .... perché devi verificare il source?
    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.