Posted by:liuzhenke15
Posted on:2006-03-31 08:30
JTable默认时,当你双击一个CELL,可以进入正常的编辑状态,但如果单击选择,或者用键盘移动光标选择,则录入的东西只会添加到当前CELL内容的后边。(如果您是用键盘选择,经常出现JTable不接收你的输入的现象)。
或许你是一个熟悉了VB/VC/BC/DELPHI的程序员,发现这种默认编辑行为很不能接受,而且经常需要鼠标加键盘的操作,特别对于一个单据录人人员来说,不断切换键盘和鼠标是非常痛苦的。
本文希望能够为您解答以上问题,共勉!
(注:本文程序在Java1.4版本可以正常运行,其它版本没有验证)
首先你需要创建一个继承KeyAdapter的类:CTableKeyAdapter。源代码如下:
package Concept.Customize.awt.event;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CTableKeyAdapter extends KeyAdapter {
JTable table;
public CTableKeyAdapter(JTable pTable) {
table=pTable;
}
public void keyTyped(KeyEvent e) {
int row;
int column;
row=table.getSelectedRow();
column=table.getSelectedColumn();
boolean bFirstTimeEdit;
bFirstTimeEdit=false;
Component editorComp;
editorComp = table.getEditorComponent();
if (editorComp==null) {
bFirstTimeEdit=true;
} else {
if (editorComp instanceof JTextField) {
if (((JTextField)editorComp).getText()==null) {
if (table.getValueAt(row,column)==null) {
bFirstTimeEdit=true;
}
} else {
if (((JTextField)editorComp).getText().equals(table.getValueAt(row,column))) {
bFirstTimeEdit=true;
}
}
}
}
if (editorComp==null) {
table.editCellAt(table.getSelectedRow(),table.getSelectedColumn());
}
editorComp = table.getEditorComponent();
if (editorComp != null) {
if (bFirstTimeEdit) {
if (editorComp instanceof JTextField) {
if (e.getKeyChar()!=KeyEvent.VK_ENTER) {
((JTextField)editorComp).setText(null);
}
}
}
editorComp.requestFocus();
}
}
}
然后在你创建JTable的地方添加以下代码即可:
table=new JTable();
table.addKeyListener(new CTableKeyAdapter(table));
TableCellEditor tableCellEditor=table.getDefaultEditor(String.class);
if (tableCellEditor!=null) {
if (tableCellEditor instanceof DefaultCellEditor) {
((DefaultCellEditor)tableCellEditor).setClickCountToStart(1);
}
}
您的程序改善了吗!