...
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData data = rs.getMetaData();
for(int i = 1 ; i<= data.getColumnCount() ; i++)
{
meta.addElement(data.getColumnName(i));
}
while(rs.next()){
Vector<Object> temp = new Vector<Object>();
for (int j = 1; j <= meta.size(); j++) {
temp.addElement(rs.getString(j));
}
v.add(temp);
}
TableModel dataModel = new AbstractTableModel()
{public boolean isCellEditable(int row, int col) {return true;}
public int getColumnCount() { return meta.size(); }
public int getRowCount() { return v.size();}
public Object getValueAt(int row, int col)
{
return v.elementAt(row).elementAt(col);
}
public void setValueAt(Object aValue, int row, int col) {
v.elementAt(row).set(col,aValue);
}
};
System.out.println(v.size());
final JTable table = new JTable(dataModel);
table.getModel().addTableModelListener(new TableModelListener(){ public void tableChanged(TableModelEvent e) {
if(e.getType() == TableModelEvent.UPDATE){
System.out.println("OK");//不知道为什么无效
String newvalue = table.getValueAt(e.getLastRow(),e.getColumn()).toString();
}
}
});
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
table.setBounds(50,50,100,100); JScrollPane scrollpane = new JScrollPane(table);
scrollpane.setPreferredSize(new Dimension(800,800));
jf.getContentPane().add(table);
// jl = new JLabel(table);
//jf.getContentPane().add(jl);
// jf.pack();
jf.setVisible(true);
}
catch(Exception e)
{
e.printStackTrace();
}
...
各位帮看看为什么???我是想当表格内容更改了以后在控制台显示ok
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData data = rs.getMetaData();
for(int i = 1 ; i<= data.getColumnCount() ; i++)
{
meta.addElement(data.getColumnName(i));
}
while(rs.next()){
Vector<Object> temp = new Vector<Object>();
for (int j = 1; j <= meta.size(); j++) {
temp.addElement(rs.getString(j));
}
v.add(temp);
}
TableModel dataModel = new AbstractTableModel()
{public boolean isCellEditable(int row, int col) {return true;}
public int getColumnCount() { return meta.size(); }
public int getRowCount() { return v.size();}
public Object getValueAt(int row, int col)
{
return v.elementAt(row).elementAt(col);
}
public void setValueAt(Object aValue, int row, int col) {
v.elementAt(row).set(col,aValue);
}
};
System.out.println(v.size());
final JTable table = new JTable(dataModel);
table.getModel().addTableModelListener(new TableModelListener(){ public void tableChanged(TableModelEvent e) {
if(e.getType() == TableModelEvent.UPDATE){
System.out.println("OK");//不知道为什么无效
String newvalue = table.getValueAt(e.getLastRow(),e.getColumn()).toString();
}
}
});
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
table.setBounds(50,50,100,100); JScrollPane scrollpane = new JScrollPane(table);
scrollpane.setPreferredSize(new Dimension(800,800));
jf.getContentPane().add(table);
// jl = new JLabel(table);
//jf.getContentPane().add(jl);
// jf.pack();
jf.setVisible(true);
}
catch(Exception e)
{
e.printStackTrace();
}
...
各位帮看看为什么???我是想当表格内容更改了以后在控制台显示ok
在你的setValueAt方法最后补上一句:fireTableCellUpdated(row, column);
这是defaulttablemodel从abstracttablemodel中继承下来的,作用就是触发一个update事件。
当然,至于你不加这句,table的展现是没有问题的。至于是否需要触发,可以根据你的需要来定,如果不需要监听也可以不加。但是建议加上。确保一旦需要,即可使用。