PDA

Visualizza la versione completa : Jtable ....


dvx80
22-07-2003, 08:40
Allora sto usando questo bellissimo componente swing ma c' una cos che non riesco a far funzionare. La Table la definisco cosi.


makeModel(fcodart.getText());
table = new JTable();
table.setModel(model);
tablepane = new JScrollPane(table);
tablepane.addFocusListener(this);


Questo il metodo che definisce il modello.



private void makeModel(String codArt) {
model.setColumnIdentifiers(new Object[]{"codart","nomart","numsta"});
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection=DriverManager.getConnection("jdbc:odbc:\\cartellini");
Statement statement=connection.createStatement(ResultSet.TYP E_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
statement.execute("SELECT * FROM Doc WHERE codart='"+codArt+"'AND azienda='"+azienda+"' ORDER BY codart,nomart");
ResultSet r=statement.getResultSet();
while(r.next()){
model.addRow(new Object[]{r.getString("codart"),r.getString("nomart"),r.getString("numsta")});
}

if(model==null)
model.addRow(new Object[]{" "," "," "});
}catch(Exception ex){System.out.println(ex);}
model.fireTableDataChanged();
}



Bene il problema st nel fatto che devo aggiornare i valori della Table a seconda del valore presente nella TextField codart.
In pratica per come impostato adesso non riesco a cancellare i dati vecchi quando vado a cambiare il valore di codart.

Cosa devo fare? Dov' che sbaglio?


TNX :).....

floyd
22-07-2003, 09:49
i metodi da usare sono
void setValueAt(Object aValue, int row, int column)
o
Vector getDataVector()
e modificare il Vector
va chiamato anche un repaint o validate
:ciauz: :gren: :gren:

dvx80
22-07-2003, 09:58
allora usando il setValueAt() quando mi crea la table per la prima volta mi di un java.lang.NullPointerException ovviamente.

Devo solo trovare un modo per portare a null il mio model o quel che sia ogni volta che aggiorno la tabella, niente di pi...

floyd
22-07-2003, 09:59
crea un Vector lo cambi e lo assegni con setDataVector

dvx80
22-07-2003, 10:14
seguendo il tuo consiglio l'ho modificato cosi ma mi da due null pointer exception sul setDataVector().....



Vector nomCol=new Vector();
nomCol.addElement("codart");
nomCol.addElement("nomart");
nomCol.addElement("codart");

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection=DriverManager.getConnection("jdbc:odbc:\\cartellini");
Statement statement=connection.createStatement(ResultSet.TYP E_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
statement.execute("SELECT * FROM Doc WHERE codart='"+codArt+"' AND azienda='"+azienda+"' ORDER BY codart,nomart");
ResultSet r=statement.getResultSet();
Vector data=new Vector();
while(r.next()){
data.addElement(r.getString("codart"));
data.addElement(r.getString("nomart"));
data.addElement(r.getString("numsta"));
}
model.setDataVector(data,nomCol);



xch ???

floyd
22-07-2003, 10:20
se posti anche l'errore meglio

dvx80
22-07-2003, 10:30
non so cosa ci si possa capire cmq



java.lang.ClassCastException
java.lang.ClassCastException
at javax.swing.table.DefaultTableModel.getValueAt(Def aultTableModel.java:617)
at javax.swing.JTable.getValueAt(JTable.java:1760)
at javax.swing.JTable.prepareRenderer(JTable.java:368 6)
at javax.swing.plaf.basic.BasicTableUI.paintCell(Basi cTableUI.java:1149)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Bas icTableUI.java:1051)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTab leUI.java:974)
at javax.swing.plaf.ComponentUI.update(ComponentUI.ja va:142)
at javax.swing.JComponent.paintComponent(JComponent.j ava:541)
at javax.swing.JComponent.paint(JComponent.java:808)
at javax.swing.JComponent.paintChildren(JComponent.ja va:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JViewport.paint(JViewport.java:707)
at javax.swing.JComponent.paintChildren(JComponent.ja va:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JComponent.paintWithOffscreenBuffer(JC omponent.java:4771)
at javax.swing.JComponent.paintDoubleBuffered(JCompon ent.java:4724)
at javax.swing.JComponent._paintImmediately(JComponen t.java:4668)
at javax.swing.JComponent.paintImmediately(JComponent .java:4477)
at javax.swing.RepaintManager.paintDirtyRegions(Repai ntManager.java:410)
at javax.swing.SystemEventQueueUtilities$ComponentWor kRequest.run(SystemEventQueueUtilities.java:117)
at java.awt.event.InvocationEvent.dispatch(Invocation Event.java:178)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 448)
at java.awt.EventDispatchThread.pumpOneEventForHierar chy(EventDispatchThread.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:144)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:136)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:99)

dvx80
22-07-2003, 10:48
non importa ho risolto facendo un mix tra la tua soluzione e la mia. La posto non si sa mai che possa servire a qualcuno :)




private void makeModel(String codArt) {

Vector nomCol=new Vector();
nomCol.addElement("nomart");
nomCol.addElement("numsta");
model.setDataVector(new Vector(),nomCol);

try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection=DriverManager.getConnection("jdbc:odbc:\\cartellini");
Statement statement=connection.createStatement(ResultSet.TYP E_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
if(tipo.equals("Articolo"))
statement.execute("SELECT * FROM Doc WHERE codart='"+codArt+"' AND azienda='"+azienda+"' ORDER BY codart,nomart");
ResultSet r=statement.getResultSet();
while(r.next()){
if(tipo.equals("Articolo"))
model.addRow(new Object[]{r.getString("nomart"),new Integer(r.getInt("numsta"))});
}
System.out.println(model.getRowCount());
if(model.getRowCount()==0)
model.addRow(new Object[]{" ",new Integer(0)});

}catch(Exception ex){System.out.println(ex);}

model.fireTableDataChanged();

}

dvx80
25-07-2003, 08:51
Ho ancora un problemino :) ....

Doveri aggiungere un ascoltatore alla mia tabella in modo di sapere quando una detterminata cella stata modificata, in modo da poter lanciare dei controlli.

Che Listener devo usare?

floyd
25-07-2003, 10:04
JTable implementa il CellEditorListener
direi che ti basta definire i metodi
void editingCanceled(ChangeEvent e)
void editingStopped(ChangeEvent e)
:gren: :gren: :gren: :gren:

Loading