Due combobox e "go"

di il
4 risposte

Due combobox e "go"

Buongiorno a tutti quanti, premetto che sono meno che pivello in programmazione java. Siate pazienti almeno le prime volte
Quello che mi fa dannare è il non riuscire a creare due combobox (uno per la scelta dell'anno, l'altro per la scelta dl mese) le cui scelte saranno gestite da un bottone.
Usando il debugger di netbeans e breakkando sulla linea "String pippo =..." vedo che la stringa anno contiene l'anno selezionato.
Se invece il breakpoint è posizionato sulla linea anno = '2020' il valore di anno è null.
Vorrei sapere, inoltre, come fare ad ottenere la combinazione anno + mese.
Grazie per l'attenzione
paps
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class ContactEditorUI extends JFrame {
    
    static Connection conn = null;
    static int id = 0;
    static String nomemese = "";
    String anno;
    String mese;
    
    /**
     * Creates new form ContactEditorUI
     */
    public ContactEditorUI() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        list2 = new java.awt.List();
        choice1 = new java.awt.Choice();
        jPanel1 = new JPanel();
        jLabel1 = new JLabel();
        ComboYear = new JComboBox<>();
        ComboMonth = new JComboBox<>();
        jButton1 = new JButton();
        list3 = new java.awt.List();
        choice2 = new java.awt.Choice();

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        /*****
                                        parte grafica creata da netbeans. Rimossa perchè non utile ai fini della soluzione del problema
        /*****/

        pack();
    }// </editor-fold>                        
    
    public void ComboYearActionPerformed(ActionEvent evt) {                                          
         String anno = (String) ComboYear.getSelectedItem();
         String pippo = "AAAAAA";
    }                                         

    private void ComboMonthActionPerformed(ActionEvent evt) {                                           
        //mese = this.passtext.getText();
    }                                          



    private void jButton1ActionPerformed(ActionEvent evt) {                                         

	try
        {
            //anno = this.nametext.getText();
            //mese = this.passtext.getText();
            anno = "2020";
            mese = "6";
        }
        
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(this, "Bad input" ,"Error" ,JOptionPane.ERROR_MESSAGE);
        }  
        
        
        /*Try log in*/ 
         try 
         {
            conn = DriverManager.getConnection("jdbc:mysql://localhost/mambo","pippolo","xxxxxxxxxx");
            System.out.println("Connection Succesfull");
           }
          catch (SQLException ex) 
          {
              // handle any errors
              System.out.println("SQLException: " + ex.getMessage());
              System.out.println("SQLState: " + ex.getSQLState());
              System.out.println("VendorError: " + ex.getErrorCode());
           }  // TODO code application logic here
    }                                        

    
	public static void main(String args[]) {
        try {
            for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("GTK+".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(ContactEditorUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(ContactEditorUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(ContactEditorUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(ContactEditorUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ContactEditorUI().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private JComboBox<String> ComboMonth;
    private JComboBox<String> ComboYear;
    private java.awt.Choice choice1;
    private java.awt.Choice choice2;
    private JButton jButton1;
    private JLabel jLabel1;
    private JPanel jPanel1;
    private java.awt.List list2;
    private java.awt.List list3;
    // End of variables declaration                   
}

4 Risposte

  • Re: Due combobox e "go"

    paps ha scritto:


    Quello che mi fa dannare è il non riuscire a creare due combobox (uno per la scelta dell'anno, l'altro per la scelta dl mese) le cui scelte saranno gestite da un bottone.
    Vorrei sapere, inoltre, come fare ad ottenere la combinazione anno + mese.
    Innanzitutto dato che le combo conterranno anni e mesi (ovvero numeri, NON stringhe), sarebbe più utile che contenessero dei Integer.
    Ovvero avere dei JComboBox<Integer> invece che JComboBox<String>. Poi si possono popolare in vari modi (nel tuo codice non è evidente COME vengono popolate perché hai tagliato del codice).

    Poi, a fronte di un click su un pulsante, nella gestione dell'evento:
    Integer annoSelezionato = (Integer) ComboYear.getSelectedItem();
    Integer meseSelezionato = (Integer) ComboMonth.getSelectedItem();
    Tutto qui. Attenzione che se non ci fosse un valore selezionato, ottieni un null. Si può testare il null o si può garantire a priori che ci sia comunque un valore selezionato.


    P.S. i nomi delle variabili dovrebbero, per convenzione standard, iniziare con la minuscola (es. comboYear, non ComboYear).
  • Re: Due combobox e "go"

    Quando ho letto la risposta mi sono picchiato. Era troppo semplice anche per un pivello come me.
    Grazie per i suggerimenti

    paps
  • Re: Due combobox e "go"

    Ho usato poco Netbeans in passato, ma solitamente in fase di debug quando ti trovi su una linea, l'operazione non è ancora stata eseguita, dovresti fare un next.

    Qui ad esempio, se il breakpoint lo inserisci sulla riga dove dichiari pippo, il valore di anno è già stato preso.
    
    public void ComboYearActionPerformed(ActionEvent evt) {                                          
             String anno = (String) ComboYear.getSelectedItem();  //<-- Qui stai dichiarando un nuovo riferimento, non il parametro
    **       String pippo = "AAAAAA";
        }
    
    Mentre qui no.
    
    private void jButton1ActionPerformed(ActionEvent evt) {                                         
    
    	try
            {
                //anno = this.nametext.getText();
                //mese = this.passtext.getText();
    **          anno = "2020";
                mese = "6";
     
    (Ho segnato con gli asterischi i due breakpoint)

    Nel metodo che ho incollato in alto stai dichiarando un altro riferimento che pur chiamandosi sempre "anno" non è lo stesso che hai dichiaranto come parametro della classe, quindi in quel metodo la variabile anno vive solo lì, a meno che non espliciti di portarne il valore poi nel parametro della tua classe.
    
    String anno = (String) ComboYear.getSelectedItem();
    this.anno = anno;
    
    Spero di averti aiutato in qualche modo!
  • Re: Due combobox e "go"

    Certo che mi hai aiutato ogni suggerimento è sempre prezioso anche se, provenendo da php, conosco bene il debugger di netbeans
Devi accedere o registrarti per scrivere nel forum
4 risposte