Problema con JTable

bircastri

Nuovo Utente
28 Mar 2009
16
0
0
Salve ragazzi avrei bisogno del vostro aiuto.

Ho realizzato una piccola JTabel contenuta in un TableModel, questa tabella in fase di inizializzazione dell'applicazione riceve i dati dal risultato di una Query, fino a qui nulla di particolare funziona perfettamente.

Ho aggiunto il metodo getValueAt che come ben sapete restituisce il contenuto di una cella.
Ora se richiedo il contenuto di una cella inizializzata in fase di esecuzione del programma funziona perfettamente altrimenti se lo faccio su di una cella che era vuota e che io ho aggiuto da tastiera qualcosa non visualizza nulla, come mai????

Certo di un vostro aiuto vi saluto MIchele
 
Ciao,
se inserisci un valore nella cella, e questa cella contiene ancora il cursore, cioè non hai cliaccato ad esempio su un'altra cella il valore ancora non viene visualizzato poichè non viene inserito ancora nella
matrice data[][] gestita se non sbaglio nel TableModel. Questo succede poichè per la JTable quella cella è anncora nello stato 'editable'. Prova a deselezionare la cella magari selezionando un'altra cella e vedrai che il valore viene acquisito e facci sapere
 
Ho provato già a fare quello che mi hai detto ma nulla. Ho provato a dare invio e fare altre cose ma niente. Anche se modifico una cella il cui valore era stato impostato all'inizio quindi che contiene dati della query mi restituisce sempre il valore originale.
 
problema urgente

Salve a tutti...
qualcuno sa dirmi che cosa è msdia80?
stavo guardando nelle cartelle del mio notebook... e ho trovato questo file nella seconda unità del disco rigido... solo soletto... ma prima non c' era...
adesso ... se lo tolgo che succede...? a che serve?

Vorrei sapere inoltre come si fa a creare una nuova discussione in questo forum... ho guardato in giro... ma non riesco a trovare nessuna voce che mi permette di aprirla... er questo ho inserito il mio problema qui...
salute
Demoleus
 
Sul model devi utilizzare il metodo setValueAt() per aggiornare i dati contenuti nella table. Dovresti mettere un listener in ascolto sulla cella che in fase di modifica della stessa invoca il metodo sopracitato.
 
bircastri, potresti dirmi in quale contesto stai utilizzando la JTable?? Forse sincronizzate con un database? Perchè in questo caso il discorso è un po piu complesso
 
Certo, allora io utilizzo la JTable in questo contesto.

Ho 2 JTable, quando avvio l'applicazione ho su un frame una JTable a destra che contiene tutti gli elementi relativi ad un database. Quindi all'avvio mostra ciò che è contenuto nel database.

La tabella di sinistra è vuota e se faccio doppio clik su un elemento della JTable di destra, esso viene riportato i quella di sinistra tutto qui.
 
Quindi mi sembra che il problema riguarda la JTable di sinistra, quando copi i dati con il doppio click, quindi provi a modificarli ma questa modifica non ha effetto giusto??

Puoi postare i frammenti di codice riguardante le due tabelle, in particolare l'action del doppio click??
 
CODICE RELATIVO ALLA TABELLA CHE VISUALIZZA LA QUERY DEL DATABASE.

TABELLA DI DESTRA:

Codice:
Vector v = db.eseguiQuery( "SELECT Descrizione FROM Ingredienti;" );
   
    //Inserisco il nome dellA colonna in un vettore 
    Vector vettore = new Vector();
    vettore.add(new String("Ingrediente"));
    //inizializzo una nuova tabella che conterrà gli elementi del vettore
    table = new TableExample(v, vettore);

classe TableExample

Codice:
class TableExample extends JTable {
  	
  	
          private class MyMouseAdapter extends MouseAdapter {
          	
              public void mouseClicked(MouseEvent me) {
            	  
              	TableExample t = (TableExample)me.getSource();
                  if (me.getClickCount() == 2) {
  // facciamo qualcosa... tu potresti ricavare il dato selezionato,
  // e lanciare una nuova query.
                      int row = t.rowAtPoint(me.getPoint());
                      int column = t.columnAtPoint(me.getPoint());
                     Object prova= t.getValueAt(row, column);
                     elementiRicetta = db.eseguiQuery( "SELECT Descrizione FROM Ingredienti WHERE Descrizione = '"+prova+"' ;" );
                     System.out.println(prova);
                     addRow();
                     selectCell(i,0);
                     ricetteTabella.setValueAt(prova,i,0);
                     i++;
                     
                  }
              }

			
          }

Codice:
 rows=new Vector();
    columns= new Vector();
    String[] columnNames = 
    { 
    "Descrizione", 
    "Percentuali",
    "Quantità",
    "Zuccheri",
    "Grassi",
    "S.N.G.L.",
    "Altri Solidi"
    };
    addColumns(columnNames);
    tabModel=new DefaultTableModel();
    tabModel.setDataVector(rows,columns);
    ricetteTabella = new JTable(tabModel);
    jScrollPane2= new JScrollPane(ricetteTabella);


//CON QUESTO PULSANTE CHIAMO LA FUNZIONE

JPanel buttonPanel=new JPanel();
    cmdAdd=new JButton("CalcolaRicetta");
    
    buttonPanel.add(cmdAdd);
    //cmdAdd.addActionListener(this);
    cmdAdd.addActionListener(new ActionListener(){
    	public void actionPerformed(ActionEvent e)
        {
            //bottone che mi consentirà di creare la ricetta
    		calcolaRicetta();
        }

    });


private void calcolaRicetta() {
		// TODO Auto-generated method stub
		int n = ricetteTabella.getRowCount();
		System.out.println("il numero di celle è"+ n);
		for (int y=0; y<=n; y++){
			zuccheri = db.eseguiQuery("SELECT Zuccheri FROM Ingredienti WHERE Descrizione ='Zucchero Semolato' ;");//restituisce solo gli zuccheri	
		    int percTot = 19;
		   //Object perc = ricetteTabella.getValueAt(y, 1);
		   // System.out.println("La percentuale di perc che hai scelto è" + perc);
		    Object perc = ricetteTabella.getValueAt(0, 2);   
		    System.out.println("xyz" +perc);
		    float totale = (19 * 60) ;
		       Object prova2 = totale / 100;
		    System.out.println(prova2);
		    ricetteTabella.setValueAt(prova2, 0, 2);
		    
		}
		
		
	}

Non fate case alle formule che ho ftto nel metodo calcolaRicetta quello che mi interessa è la variabile di tipo object Perc che non restituisce il valore corretto se in quella cella ci inserisco un numero a caso o una lettera insomma un carattere
 

Discussioni simili