Newsgroup: it.comp.java
Titolo: jtable con notfica dati errati

salve a tutti, ho creato una jtable che deve essere utilizzata per
inserire dei dati su 3 colonne, una volta terminato l'inserimento
questi vengono controllati tramite una select ad un db. I dati non
presenti nel db, quindi considerati non corretti devono essere
visualizzati in rosso, e fin qui il programma funziona ma al momento
di andare a correggere i dati sostituendo le stringhe non corrette la
jtable non lo permette. Di seguito il codice.
grazie ad ogni buon anima che gli vorrà dare un occhiata
[code]
package campioni;
import java.awt.Color;
import java.awt.Component;
import java.sql.SQLException;
import java.util.Hashtable;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
public class Ins_serie extends javax.swing.JFrame {
    Metodi met = new Metodi();
    MetodiAS metAS = new MetodiAS();
    /** Creates new form Modifica_cerca */
    public Ins_serie() {
        initComponents();
        this.setVisible(true);
        met.centerFrame(this);
        jtDati.setRowHeight(22);
        JLabel label = (JLabel) jtDati.getDefaultRenderer
(Object.class);
        label.setHorizontalAlignment (SwingConstants.CENTER);
    }
    public Ins_serie(Vector v_dati) {
        initComponents();
        this.setVisible(true);
        met.centerFrame(this);
        jtDati.setRowHeight(22);
        JLabel label = (JLabel) jtDati.getDefaultRenderer
(Object.class);
        label.setHorizontalAlignment (SwingConstants.CENTER);
    }
	private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jtDati = new javax.swing.JTable();
        jbInserisci = new javax.swing.JButton();
 
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        jLabel1.setFont(new java.awt.Font("Tahoma", 0, 24));
        jLabel1.setText("Inserimento in serie");
        jtDati.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jtDati.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                ...
            },
            new String [] {
                "Cliente", "Disposizione", "Colore",
            }
        ));
        ColorRenderer cr=new ColorRenderer();
        for (int i=0;i< 1;i++){
 
jtDati.getColumn(jtDati.getColumnName(i)).setCellRenderer(cr);
        }
        jScrollPane1.setViewportView(jtDati);
        jbInserisci.setFont(new java.awt.Font("Tahoma", 1, 16)); //
NOI18N
        jbInserisci.setText("Inserisci");
        jbInserisci.addMouseListener(new java.awt.event.MouseAdapter()
{
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jbInserisciMouseClicked(evt);
            }
        });
        javax.swing.GroupLayout layout = new
javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
 
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
                .addContainerGap(396, Short.MAX_VALUE)
                .addComponent(jbInserisci)
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1))
                .addContainerGap(45, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
 
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 460,
javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
34, Short.MAX_VALUE)
                .addComponent(jbInserisci)
                .addContainerGap())
        );
        pack();
    }// </editor-fold>
    private void jbInserisciMouseClicked(java.awt.event.MouseEvent
evt) {
        // TODO add your handling code here:
        Inserisci();
    }
    private void InserisciDB(Vector v){
    }
    public void Inserisci(){
        ConnessioneAS400 conAS = null;
        int i = 0;
        Vector v_ris = new Vector();
        boolean b_ok = true;
        while(jtDati.getValueAt(i, 0) != null){
            ...
        }
        try {
            conAS.close();
        } catch (SQLException ex) {
 
Logger.getLogger(Ins_serie.class.getName()).log(Level.SEVERE, null,
ex);
        }
        jtDati.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {null, null, null},
...
        {null, null, null}
        },
        new String [] {
            "Cliente", "Disposizione", "Colore",
        }
    ));
    ColorRenderer cr=new ColorRenderer(v_ris);
    for (int j=0;j< 3;j++){
        jtDati.getColumn(jtDati.getColumnName(j)).setCellRenderer(cr);
    }
    if (b_ok == true){
        InserisciDB(v_ris);
        this.dispose();
    }
}
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton jbInserisci;
    private javax.swing.JTable jtDati;
}
class ColorRenderer extends JLabel implements TableCellRenderer
    {
    Vector v_dati = null;
    Metodi met = new Metodi();
    MetodiAS metAS = new MetodiAS();
    public ColorRenderer(){
        setOpaque(true);
    }
    public ColorRenderer (Vector v){
        setOpaque(true);
        v_dati = v;
    }
     public boolean isCellEditable(int row, int col) {
        return false;
     }
    public Component getTableCellRendererComponent(JTable table,
Object value,boolean isSelected, boolean hasFocus, int row, int
column)
     {
         setFont(new java.awt.Font("Tahoma", 0, 14));
         setBackground(Color.white);
         setHorizontalAlignment (SwingConstants.CENTER);
         isCellEditable(row, column);
         if (v_dati == null){
             if (value != null) {
                 setText(value.toString());
             }
             else{
                 setText("");
             }
         }
         else{
             try{
                Hashtable ht = (Hashtable) v_dati.get(row);
                metAS.printSingleHash(ht);
                if (((String)ht.get("cor")).equals("0")){
                   setBackground(java.awt.Color.pink);
                }
                else{
                    setBackground(java.awt.Color.white);
                }
                if (column == 0){
                    setText((String)ht.get("cliente"));
                }
                else if (column == 1){
                    setText((String)ht.get("disp"));
                }
                else if (column == 2){
                    setText((String)ht.get("colore"));
                }
                else{
                     setText("");
                 }
             }
             catch (ArrayIndexOutOfBoundsException ex){
                 setText("");
                 setBackground(java.awt.Color.white);
             }
         }
         return this;
     }
}
[/code]

      ));
Se posso perch� ridefinisci il modello della tabella? Al massimo 
ricavalo con un (DefualtTableModel) jtDati.getModel();
e poi lo modifichi come ti serve.
Hai provato ad usare il metodo focusGained per una determinata cella?
class ColorRenderer extends JLabel implements TableCellRenderer
     {
     Vector v_dati = null;
     Metodi met = new Metodi();
     MetodiAS metAS = new MetodiAS();
     public ColorRenderer(){
         setOpaque(true);
     }
     public ColorRenderer (Vector v){
         setOpaque(true);
         v_dati = v;
     }
      public boolean isCellEditable(int row, int col) {
         return false;
      }
devi dirgli che la cella sia modificabile con setEditable(true); o 
qualcosa di simile.