Cerca con indice di selezione

di il
5 risposte

Cerca con indice di selezione

Ragazzi ho un piccolo problema, io ho una tabella dove vengono visualizzati dei nominativi, ora vorrei che selezionando uno di questi nominativi e cliccando sull'apposito bottone in un'altra tabella mi uscissero tutte le carte ad essi associate.

Ecco come faccio a farlo?

Cioè come scrivo il metodo cerca che mi trova tutte le carte associate ad un utente prelevato da una tabella tramite indice di selezione?

Spero di essere stato chiaro.

5 Risposte

  • Re: Cerca con indice di selezione

    CRTVLB ha scritto:


    Ragazzi ho un piccolo problema, io ho una tabella dove vengono visualizzati dei nominativi
    Tabella .... JTable?

    CRTVLB ha scritto:


    ora vorrei che selezionando uno di questi nominativi e cliccando sull'apposito bottone in un'altra tabella mi uscissero tutte le carte ad essi associate.
    Quello che è certo, è che se c'è una riga selezionata e tu clicchi su un qualche pulsante, allora all'evento puoi sicuramente:
    1) Prendere l'indice della riga selezionata, getSelectedRow()
    2) Prendere (meglio direttamente dal model) i dati della riga

    Ma da qui in avanti ... è un altro discorso, dipende ...

    CRTVLB ha scritto:


    Cioè come scrivo il metodo cerca che mi trova tutte le carte associate ad un utente prelevato da una tabella tramite indice di selezione?
    Ma scusa, detto così vuol dire poco/niente. Quali sono le strutture dati coinvolte? Come è fatta e gestita la relazione tra utenti e carte? (carte poi cosa o di che cosa?) Stiamo parlando di dati su un database relazionale, quindi ci sono da fare delle query con JDBC (o altra API al di sopra di JDBC)? Oppure di una "base dati" interamente in memoria o gestita in altro modo?
    E poi i table model sono tuoi o usi es. DefaultTableModel?
  • Re: Cerca con indice di selezione

    Mi spiego meglio, per esercitarmi con java stavo simulando la gestione di carte di Credito, con prelievi,versamenti, visualizza operazioni ecc... L'idea è che ogni utente possa avere da 1 a più carte di credito.

    questa è la mia classe cliete
    
    public class Cliente {
        
        private String nome;
        private String cognome;
        private String codiceF;
        private String via;
        private String città;
        private String cap;
        private String telefono;
        private Calendar dataDiNascita = new GregorianCalendar();
        
        
    private List<CartaDiCredito> listaCarte = new ArrayList<CartaDiCredito>();
        public Cliente() {}
        
        public Cliente(String nome, String cognome, String codiceF, String via, String città,String cap,String telefono, Calendar dataDiNascita) {
            this.nome = nome;
            this.cognome = cognome;
            this.codiceF = codiceF;
            this.via = via;
            this.città = città;
            this.cap = cap;
            this.telefono = telefono;
            this.dataDiNascita = dataDiNascita;
            dataDiNascita.getTime();
            dataDiNascita.setLenient(false);
        }
    
        public String getNome() {
            return nome;
        }
    
        public void setNome(String nome) {
            this.nome = nome;
        }
    
        public String getCognome() {
           return cognome;
        }
    
        public void setCognome(String cognome) {
            this.cognome = cognome;
        }
    
        public String getCodiceF() {
            StringBuilder sb = new StringBuilder();
            sb.append(nome.substring(0, 3));
            sb.append(cognome.substring(0, 3));
            return sb.toString().toUpperCase();
        }
    
        public void setCodiceF(String codiceF) {
            this.codiceF = codiceF;
        }
    
        public String getVia() {
            return via;
        }
    
        public void setVia(String via) {
            this.via = via;
        }
    
        public String getCittà() {
            return città;
        }
    
        public void setCittà(String città) {
            this.città = città;
        }
    
        public String getCap() {
            return cap;
        }
    
        public void setCap(String cap) {
            this.cap = cap;
        }
        
          public String getTelefono() {
            return telefono;
        }
    
        public void setTelefono(String telefono) {
            this.telefono = telefono;
        }
    
        public Calendar getDataDiNascita() {
            return dataDiNascita;
        }
    
        public void setDataDiNascita(Calendar dataDiNascita) {
            this.dataDiNascita = dataDiNascita;
        }
    
        public List<CartaDiCredito> getListaCarte() {
            return listaCarte;
        }
    
        public void setListaCarte(List<CartaDiCredito> listaCarte) {
            this.listaCarte = listaCarte;
        }
        
        public void aggiungiCarte(CartaDiCredito carta) {
            this.listaCarte.add(carta);
        }
        
        public void rimuoviCarte(CartaDiCredito carta) {
            this.listaCarte.remove(carta);
        }
        
        public String toStringData() {
            Date d = dataDiNascita.getTime();
            SimpleDateFormat data = new SimpleDateFormat("EEEE dd-MMMM-yyyy");
            return data.format(d);
        }
        
        
        @Override
        public String toString() {
            String stringa = "";
            stringa +="\n";
            stringa +=" Nome:" +" " + nome +"\n";
            stringa +=" Cognome:" + " " + cognome +"\n";
            stringa +=" Indirizzo" + " " + "Via:" +" " + via +" " +" Città" +" " + città + " " +"cap:"+ cap +"\n";
            stringa +=" Telefono:" +" " + telefono;
            stringa +=" Data Di Nascita:" +" " + toStringData()+"\n";
            stringa += "\n";
            return stringa;
        }
            
    }
    
    Mentre questa è la mia classe CarteDiCredito
    
     private int numeroCarta;
        private double saldoCarta;
        private Calendar dataRilascio = new GregorianCalendar();
        private Calendar dataScadenza = new GregorianCalendar();
        
        private List<Operazione> listaOperazioni = new ArrayList<Operazione>();
        
        public CartaDiCredito() {}
        
        public CartaDiCredito(int numeroCarta, double saldoCarta,Calendar dataRilascio, Calendar dataScadenza ) {
            this.numeroCarta = numeroCarta;
            this.saldoCarta = saldoCarta;
            this.dataRilascio = dataRilascio;
            this.dataScadenza = dataScadenza;
            dataRilascio.getTime();
            dataScadenza.getTime();
            dataRilascio.setLenient(false);
            dataScadenza.setLenient(false);
        }
    
        public int getNumeroCarta() {
            return numeroCarta;
        }
    
        public void setNumeroCarta(int numeroCarta) {
            this.numeroCarta = numeroCarta;
        }
    
        public double getSaldoCarta() {
            return saldoCarta;
        }
    
        public void setSaldoCarta(double saldoCarta) {
            this.saldoCarta = saldoCarta;
        }
    
        public Calendar getDataRilascio() {
            return dataRilascio;
        }
    
        public void setDataRilascio(Calendar dataRilascio) {
            this.dataRilascio = dataRilascio;
        }
    
        public Calendar getDataScadenza() {
            return dataScadenza;
        }
    
        public void setDataScadenza(Calendar dataScadenza) {
            this.dataScadenza = dataScadenza;
        }
    
        public List<Operazione> getListaOperazioni() {
            return listaOperazioni;
        }
    
        public void setListaOperazioni(List<Operazione> listaOperazioni) {
            this.listaOperazioni = listaOperazioni;
        }
        
        public void aggiungiOperazione(Operazione operazione) {
            this.listaOperazioni.add(operazione);
        }
        
        public String toStringDataRilascio() {
            Date d = dataRilascio.getTime();
            SimpleDateFormat rilascio = new SimpleDateFormat("EEEE dd-MMMM-yyyy");
            return rilascio.format(d);
        }
        
        public String toStringDataScadenza() {
            Date d = dataScadenza.getTime();
            SimpleDateFormat scadenza = new SimpleDateFormat("EEEE dd-MMMM-yyyy");
            return scadenza.format(d);
        }
        
        public String toString() {
            String stringa = "";
            stringa += "\n";
            stringa += " Numero Carta:" +" " + numeroCarta +"\n";
            stringa += " Saldo:"+" " + saldoCarta +"\n";
            stringa += " Data Rilascio:" + dataRilascio +"\n";
            stringa += " Data Scadenza:" + " " + dataScadenza +"\n";
            return stringa;
        }
    }
    
    Questa è il Modello Della Tabella che visualizza le Carte Associate Al Cliente Selezionato
    
    public class ModelloTabellaCarte extends AbstractTableModel{
    
        private Cliente cliente;
        private Logger logger = (Logger) LoggerFactory.getLogger(ModelloTabellaCarte.class);
    
        public ModelloTabellaCarte(Cliente cliente) {
            this.cliente = cliente;
        }
    
        public int getRowCount() {
            return this.cliente.getListaCarte().size();
        }
    
        public int getColumnCount() {
            return 4;
        }
        
    
        public Object getValueAt(int r, int c) {
            if (c== 0) {
                return cliente.getListaCarte().get(r).getNumeroCarta();
            }else if(c == 1) {
                return cliente.getListaCarte().get(r).getSaldoCarta();
            }else if(c == 2) {
                return cliente.getListaCarte().get(r).getDataRilascio();
            }else if (c == 3) {
                return cliente.getListaCarte().get(r).getDataScadenza();
            }
            return null;
        }
        
        public String getColumnName(int c) {
             if(c == 0) {
                return "Numero";
            }else if (c == 1) {
                return "Saldo";
            }else if (c == 2) {
                return "Data Di Rilascio";
            }else if (c == 3) {
                return "Data Scadenza";
            }
            return null;
        }
    }
    
    E Questa è L'actionPerformed che ho scritto per far visualizzare le carte
    
      public void actionPerformed(ActionEvent e) {
            PannelloPrincipale pp = (PannelloPrincipale) this.applicazione.getVista().getSottoViste(Costanti.PANNELLOPRINCIPALE);
            Cliente c = (Cliente) this.applicazione.getModello().getBean(Costanti.CLIENTE);
            
            int riga = pp.clienteSelezionato();
            c.getListaCarte().get(riga);
            pp.inizializzaTabellaCarte();
            applicazione.abilitazioniIniziali();
        }
    }
    
    Ovviamente nel mio pannello principale ho questi due metodi
    
     public void inizializzaTabellaCarte() {
            Cliente c = (Cliente) this.vista.getModello().getBean(Costanti.CLIENTE);
            
            ModelloTabellaCarte mtc = new ModelloTabellaCarte(c);
            this.getTabellaCarte().setModel((TableModel)mtc);
            this.scrollTabellaCarte.setViewportView(getTabellaCarte());
        }
        
        public int clienteSelezionato() {
            return tabellaClienti.getSelectedRow();
        }
    
    In fase di compilazione tutto ok, in fase di esecuzione mi da questo errore
    
     java.lang.NullPointerException
    	at it.unibas.banca.controllo.AzioneVisualizzaCarteCliente.actionPerformed(AzioneVisualizzaCarteCliente.java:37)
    
    I dati, siccome per il momento sto simulando, vengono caricati dalla persistenza.
  • Re: Cerca con indice di selezione

    Risoloto, ho cambiato l'actionPerformed in questo modo ed ora funziona
    
    public void actionPerformed(ActionEvent e) {
            PannelloPrincipale pp = (PannelloPrincipale) this.applicazione.getVista().getSottoViste(Costanti.PANNELLOPRINCIPALE);
    Banca banca = (Banca) this.applicazione.getModello().getBean(Costanti.BANCA);
    int riga = pp.clienteSelezionato();
    Cliente cliente=banca.getCliente(riga);
    this.applicazione.getModello().putBean(Costanti.CLIENTE, cliente);
    pp.inizializzaTabellaCarte();
        }
    
  • Re: Cerca con indice di selezione

    CRTVLB ha scritto:


    Risoloto, ho cambiato l'actionPerformed in questo modo ed ora funziona
    Se ti funziona ... ok, mi fa piacere (non avrei molto tempo oggi di leggere bene tutto il codice postato).

    CRTVLB ha scritto:


            PannelloPrincipale pp = (PannelloPrincipale) this.applicazione.getVista().getSottoViste(Costanti.PANNELLOPRINCIPALE);
    Banca banca = (Banca) this.applicazione.getModello().getBean(Costanti.BANCA);
    
    Però tieni presente che cose tipo:
    this.applicazione.getVista().getSottoViste( ...blabla ...)

    denotano un "design" un po' "fumoso".
  • Re: Cerca con indice di selezione

    andbin ha scritto:



    denotano un "design" un po' "fumoso".
    Ho sempre fatto in questo modo, quindi non saprei proprio come altro fare.

    Mi potresti indicare il modo corretto?
Devi accedere o registrarti per scrivere nel forum
5 risposte