今天刚学到的,记录下,以后看的方便
1.设置JTable的渲染器:
DefaultTableModel dtm=new DefaultTableModel(s_data,s_head);
jt=new JTable(dtm);
jt.setDefaultRenderer(Object.class, new TableViewRenderer()); //设置其渲染器
//以下渲染器实现功能:单元格内文本过长时会被Wrapped(顿时有点不太清楚这个单词该怎么解释)
class TableViewRenderer extends JTextArea implements TableCellRenderer{
public TableViewRenderer(){
setLineWrap(true);
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
setText(value==null?"":value.toString());
return this;
}
}
2.设置JTable的 编辑属性和监听机制
默认情况是所有行和所有列都可编辑。
//下面实现第2行2列的单元格可编辑,其他单元格则不可编辑
JTable jt=new JTable(new DefaultTableModel(v_data,v_head)){
public boolean isCellEditable(int row,int column){
if(row == 2 && column == 2){
return true;
}
else{
return false;
}
}
});
监听机制实现:
TableChangeListener tl=new TableChangeListener(stmt);
jt.getSelectionModel().addListSelectionListener(tl); //为行设置监听器,当行值发生变化时采取的动作,具体方法名由接口已经定义,具体细节自己实现
jt.getColumnModel().addColumnModelListener(tl); //为列设置监听器,当列值发生变化时采取的动作
jt.getModel().addTableModelListener(tl); //更细节的监听器,可以具体对某行某列变化值进行测定
class TableChangeListener implements ListSelectionListener,TableModelListener,TableColumnModelListener{
int rowNum,colNum;
Statement statement;
public TableChangeListener(Statement statement){
this.statement=statement;
}
public void valueChanged(ListSelectionEvent e){
rowNum=jt.getSelectedRow();
}
public void columnSelectionChanged(ListSelectionEvent e){
colNum=jt.getSelectedColumn();
}
public void tableChanged(TableModelEvent e){
if(colNum==**&&rowNum==**){
//do something
}
}
}