Ciao a tutti ragazzi,
ho una tabella con 6 colonne di cui l'ultima è una combobox. La tabella contiene dei dati prelevati da database e la creazione della tabella con la combobox e la popolazione sia della tabella che della combobox va tutto ok.
Adesso devo implementare il seguente comportamento: aggiungo una riga alla tabella con un bottone (OK), inserisco i dati nelle rispettive celle, selezioni il valore corretto dalla combobox e devo memorizzare questi dati sul database.
Il problema è che non riesco a recuperare l'elemento selezionato dalla combobox.
Potete aiutarmi?
Vi posto un po di codice:
Questo è il codice per la creazione della struttura della tabella e per la popolazione della combobox:
Questa è l'implementazione del listener associato alla tabella, che uso per gestire gli aggiornamenti e gli inserimenti:codice:String [] colonne = {"ID","Data Acquisto","Descrizione","Importo Base","Tariffa","Categoria"}; Vector rows=new Vector(); Vector columns= new Vector(); for(int i=0;i<colonne.length;i++){ columns.addElement((String) colonne[i]); } DefaultTableModel tabModel = new DefaultTableModel() { @Override public boolean isCellEditable(int i, int i1) { if (i1 == 0) return false; else return true; } }; tabModel.setDataVector(rows,columns); tabModel.fireTableStructureChanged(); accessoryTable.setModel(tabModel); accessoryTable.getModel().addTableModelListener(this); TableColumn catVeicolo = accessoryTable.getColumnModel().getColumn(5); catVeicoloCB = new JComboBox(); catVeicoloCB.addItem("Seleziona..."); try { MysqlOp.getInstance().eseguiQuery("select * from Categoria_Veicolo;"); ResultSet rs = MysqlOp.getInstance().getResultSet(); while(rs.next()){ catVeicoloCB.addItem(rs.getString("categoria")+" - "+rs.getString("descrizione")); } } catch (SQLException ex) { Exceptions.printStackTrace(ex); } catVeicolo.setCellEditor(new DefaultCellEditor(catVeicoloCB)); DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); renderer.setToolTipText("Clicca per scegliere altre opzioni"); catVeicolo.setCellRenderer(renderer);
Vi risparmio le query al database perche non servono!codice:public void tableChanged(javax.swing.event.TableModelEvent source){//Table Changed Method TableModel tabMod = (TableModel)source.getSource(); switch (source.getType()){ case TableModelEvent.UPDATE: column = source.getColumn(); row = source.getFirstRow(); idAccessorio = accessoryTable.getValueAt(row, 0).toString(); if (column == 1){ String []data = accessoryTable.getValueAt(accessoryTable.getSelectedRow(), accessoryTable.getSelectedColumn()).toString().split("/"); dataAcquisto = data[2] + "-" + data[1] + "-" + data[0]; }else if (column == 2){ descrizione = accessoryTable.getValueAt(accessoryTable.getSelectedRow(), accessoryTable.getSelectedColumn()).toString(); }else if (column == 3){ importo = accessoryTable.getValueAt(accessoryTable.getSelectedRow(), accessoryTable.getSelectedColumn()).toString(); }else if (column == 4){ tariffa = accessoryTable.getValueAt(accessoryTable.getSelectedRow(), accessoryTable.getSelectedColumn()).toString(); }else if (column == 5){ String value = tabMod.getValueAt(row, column).toString(); String []split = value.split(" - "); categoria = split[0]; } break; } }
io credo che il problema sta nell'identificare l'evento, ovvero facendo un po di debug ho scoperto che l'applicazione si blocca quando clicco sulla combobox e scelgo un valore. Pensate che la combobox rimane bloccata con la tendina aperta e per sbloccare il pc devo killare il processo di java.
Come posso risolvere?
Grazie a tutti in anticipo

Rispondi quotando