java jtable 编辑_Java开发网 - 你想改善JTable的默认编辑行为吗

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);

}

}

您的程序改善了吗!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值