在JTable单元个中增加文本输入框是经常遇到的,一般在开发中会遇到在表格中对输入做控制就可以用到这种方法来实现
实现方式:
重写:TableCellRenderer接口
Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column)返回用于绘制单元格的组件。
此方法用于在绘制前适当地配置渲染器。
参数:
table - 要求渲染器绘制的JTable;可以为null
value - 要呈现的单元格的值。
由具体的渲染器解释和绘制该值。
例如,如果value 是字符串"true",则它可呈现为字符串,或者也可呈现为已选中的复选框。
null 是有效值
isSelected - 如果使用选中样式的突出显示来呈现该单元格,则为true;否则为false
hasFocus - 如果为true,则适当地呈现单元格。
例如,在单元格上放入特殊的边框,如果可以编辑该单元格,则以彩色呈现它,用于指示正在进行编辑
row - 要绘制的单元格的行索引。
绘制头时,row 值是-1
column - 要绘制的单元格的列索引
JTable得单元格(cell)在渲染得时候使用得是默认得DefaultTableCellRenderer。
其
返回的Component是继承了JLabel得组件,所以直接使用默认得渲染器对其内容的更改
显得力不从心。
其监听主要在他得CellEditor上面JTable使用的默认得编辑器为JTextField,这样你就可以重新添加编辑器即继承DefaultCellEditor然后给其添加一定得监听事件后在
对jtable添加编辑器,单这样做我感觉过于过于繁琐。
在单元格进行编辑的时候会触发TablechangEvent 事件,Tablechange事件提供了几种触发事件得类型主要分为:
1.insert
2.update
3.delete
如果要对其某个单元格得内容是否真得发生了更改得话只有选择update类型,但其监听得事件是在你双击进入编辑状态后不管有没有对数据进行更改都会触发此事件。
如果我们能获得进入编辑状态前和编辑状态完成后得内容是很容易确定其内容是否真得进行
过更改得。
首先对Jtable添加TableModelListener方法如下
JTable t = new JTable();
String oldvalue = null;//定义全局变量用于记录编辑前得内容
t.getModel().addTableModelListener(new
TableModelListener(){
public void tableChanged(TableModelEvent e) {
if(e.getType() == TableModelEvent.UPDATE){
/*
* do some thing 获得编辑后单元格得值
*/
String newvalue =
t.getValueAt(e.getLastRow(),e.getColumn()).toString();
if(!newvalue.equals(oldvalue)){
/*
* call the value changed metod;
*/
}
}
}
});
这样就可以对其是否进入过编辑状态有了监听,然后在给其添加mouselistener 就可以对其进去编辑状态前得情况进行记录
t.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
//记录进入编辑状态前单元格得数据
oldvalue =
t.getValueAt(t.getSelectedRow(),t.getSelectedColumn()).toString() ;
}
});。