Java JTable 如何让表格单击单元格后就进入编辑状态

默认下新建的JTable单击单元格后不进如编辑状态 虽然单击后输入(英文或数字)后会进入编辑状态 但是打开输入法输入则无效

所以我想知道怎样才能使单元格单击后就进入编辑状态 即单元格获得光标(焦点)?
zoulixing1984 你的方法最好 但是进入编辑状态后并没有获得光标 请问如何解决

这个简单:如果按楼上的人的方法,会害死你不可,2楼的绝对不行,我刚开始也这样,现在想想,真的要看JAVA的原代码了

jTable1 = new javax.swing.JTable(){
public void changeSelection(int rowIndex, int columnIndex,
boolean toggle, boolean extend){
super.changeSelection(rowIndex, columnIndex, toggle, extend);
super.editCellAt(rowIndex, columnIndex, null);
}
};

这样后jTable1 对象只要单击就进入编辑状态;
因为JTable每次都会自动的调用changeSelection方法,不需要你判断是否有焦点

你肯定还会遇到,JTable没把焦点取消,单元格的数据无法保存,
if(jTable.isEditing()){
jTable.getCellEditor().stopCellEditing();
}

----------补充-------

不是可以输中文了吗?具体有没有光标很重要吗?

我的QQ:7706189,加我说明是那个问题
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-01-11
需要重写JTable 的 isCellEditable 方法。

如下,继承JTable,使指写的行列,在isCellEditable方法中返回是false即可使之不可编辑。
Class MyTable extends JTable{
public boolean isCellEditable(int row,int col){
}
}
具体逻辑有些麻烦。需要做出一个二维数组来记录。
第2个回答  推荐于2018-02-07
有个问题
现在情况是: 比如当前编辑的单元格位(row, col)
当单元格编辑结束(按回车),要对数据作检查,检查不通过,会出dialog,然后要求进入到下一个单元格(row, col + 1)进入编辑状态

现在代码如下,是在对单元格(row,col)作了事件监听,然后出了dialog:
showDialog();
table.requestFocus();
table.editCellAt(row, col+1); //(*)
table.changeSelection(row, col+1, true, true); //(**)

现象是,不论*,或**行次序变化,屏幕出了dialog后,table的单元格(row, col)进入编辑状态,而不是(row, col+1)进入编辑状态本回答被网友采纳
第3个回答  2009-06-07
有单击事件和双击事件
在着两个时间中写方法就可以实现你说的功能

具体怎么操作看JAVA相关文档

Java JTable 如何让表格单击单元格后就进入编辑状态
当单元格编辑结束(按回车),要对数据作检查,检查不通过,会出dialog,然后要求进入到下一个单元格(row, col + 1)进入编辑状态 现在代码如下,是在对单元格(row,col)作了事件监听,然后出了dialog: showDialog(); table.requestFocus(); table.editCellAt(row, col+1); \/\/(*) table.changeSelection(row...

JAVA怎样设置JTable的单元格不能被编辑?
MyTable table1,table2,table3...2.用内部类直接重写它的isCellEditable方法 private JTable table1;table1=new JTable(){ ?public boolean isCellEditable(int row,int col){ ??...?} };如果里面直接return true或者false,就使得整个表格所有行,列可编辑或者不可以 如果想要某个行或者列可以编辑,...

java中怎么删除或者修改JTable指定的一行内容?
jtable修改内容可以通过defaulttablemodel来修改的,以下是defaulttablemodel的简单用法 int col = jTable1.getSelectedColumn();\/\/获取选中的列号int row = jTable1.getSelectedRow();\/\/获取选中的行号DefaultTableModel model = (DefaultTableModel) jTable1.getModel();\/\/获取defaulttablemodelObject v...

如何让Jtable不可编辑?
如果控制row和column的值,可以控制任何一个单元格可编辑或不可编辑。 网上很多回答的主要有两种错误:1、建议直接使用JTable的方法 setEnabled(false), 例如:jTable.setEnabled(false),但是这种方法只是使jTable失效,即让jTable只能看,不能做其他任何操作。2、在定义DefaultTableModel类时使用isCellEdita...

如何让jtable不能选中单元格?
用requestFocus可以用Tab键在JTable和JTextField之间来回切换焦点,下面是其例子程序:运行没问题。import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTable;import javax.swing.JTextField;public class C extends ...

Java中JTble表格中的数据如何逐行显示?
不过JTable的setValueAt方法应该就可以实现。楼主可以定义个一个线程类来完成。比如你需要插入100行数据,可以在线程的run方法中写一个循环,在循环中写两行代码,一行是setValueAt,一行是刷新JTable,然后再让线程睡眠,这样一行一行的显示的效果就可以出来了!或者楼主可以用进度条来打发等待的时间,就像...

Java中,JTable如何在在创建表时,只指定列名称和列对应的数据类型,而...
首先,不知道你是用的什么模式开发,建议使用mvc模式;我以学生管理系统为例:创建JTable jt=new JTable(sm); 其中sm是public class StuModel extends AbstractTableModel的对象,此时在StuModel类中你要重写public int getRowCount(),public int getColumnCount() ,public Object getValueAt(int row...

如何让JTable不可编辑
public class Test extends JFrame { public static void main(String[] args) { JFrame jframe = new JFrame();jframe.setBounds(50, 50, 200, 300);DefaultTableModel tableModel = new DefaultTableModel(100, 100);JTable jTable=new JTable(tableModel){ public boolean isCellEditable(int...

java swing如何在JTable一个单元格添加多个复选框
用来处理按钮点击后的编辑(让复选框可以选择)实现过程 写一个类去继承AbstractTableModel , 用来当数据模型 写一个类去实现TableCellRenderer 接口. 用来当渲染器 写一个类去实现TableCellEditor 接, 用来当编辑器 然后把给表格JTable填充数据, 设置渲染器和编辑器即可 ...

如何在JTable的一个单元格中嵌入下拉框
你可以自己做一个JTable的子类,然后覆盖他的方法getCellEditor(int row,int col),在你的子类你可以设计一个方法,允许用户设置指定的一个cell使用下拉框编辑器,然后再你覆盖的方法中,判断当前请求编辑的cell,是不是你指定的,如果是则返回下拉框编辑器. 如果你需要对多个单元指定不同的下拉框编辑器,那...

相似回答