我看JTable的代码这么写的:public JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) { super(); setLayout(null); setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, JComponent.getManagingFocusForwardTraversalKeys()); setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, JComponent.getManagingFocusBackwardTraversalKeys()); if (cm == null) { cm = createDefaultColumnModel(); autoCreateColumnsFromModel = true; } setColumnModel(cm); if (sm == null) { sm = createDefaultSelectionModel(); } setSelectionModel(sm); // Set the model last, that way if the autoCreatColumnsFromModel has // been set above, we will automatically populate an empty columnModel // with suitable columns for the new model. if (dm == null) { dm = createDefaultDataModel(); } setModel(dm); initializeLocalVars(); updateUI(); }其中的setFocusTraversalKeys(...)就是设定Tab键,我就想,为什么它可以设置,我们就不行呢?而且它的Tab键控制得很好,不能获得焦点的Cell就会跳过,如果是我们自己写,还要一堆判断,不麻烦吗?所以我提出来,如果能按最简单的做,何乐而不为呢?大家用起来也会觉得很爽啊。不过我仿照它的这种写法,效果出不来,焦点老是跳不出去,晕死!!
JTable在JDK里面是这样写的: public class JTable extends JComponent implements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible { …… }我觉得楼主是否可以自己也从JComponent继承一个类,也实现JTable的这些接口。然后再这个基础上实现自己需要的东西? 相当于自己写了一个JTable类。我以前做过类似的项目。好象当初我的那帮同事就是这个做的。在第一个框里输入字符,然后回车就自动跳到下一个框。我想也应该和楼主提出的要求类似。仅提出一个想法。请大家给个意见。谢谢!
他们只知道他想要什么,他可不会管你的实现是怎么样的
友好的用户界面是成功软件不可缺少的因素我只是认为java不可能连这样的设定都不行再指正一点,这是我发的第三个帖子问这个问题,谢谢你的up ^_^
1、不要告诉我加一个监听器,再判断键值什么的
2、不用先得出当前Cell的行和列的值,然后再用 列值+1 取得下一个Cell再赋给它焦点
================================================================================
让人晕倒的条件~~~
关注!
你这样的要求我觉得太难了,或者你看一下Excel中回车后它的焦点控制是怎么做的。
super();
setLayout(null); setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
JComponent.getManagingFocusForwardTraversalKeys());
setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
JComponent.getManagingFocusBackwardTraversalKeys()); if (cm == null) {
cm = createDefaultColumnModel();
autoCreateColumnsFromModel = true;
}
setColumnModel(cm); if (sm == null) {
sm = createDefaultSelectionModel();
}
setSelectionModel(sm); // Set the model last, that way if the autoCreatColumnsFromModel has
// been set above, we will automatically populate an empty columnModel
// with suitable columns for the new model.
if (dm == null) {
dm = createDefaultDataModel();
}
setModel(dm); initializeLocalVars();
updateUI();
}其中的setFocusTraversalKeys(...)就是设定Tab键,我就想,为什么它可以设置,我们就不行呢?而且它的Tab键控制得很好,不能获得焦点的Cell就会跳过,如果是我们自己写,还要一堆判断,不麻烦吗?所以我提出来,如果能按最简单的做,何乐而不为呢?大家用起来也会觉得很爽啊。不过我仿照它的这种写法,效果出不来,焦点老是跳不出去,晕死!!
public class JTable extends JComponent implements TableModelListener, Scrollable,
TableColumnModelListener, ListSelectionListener, CellEditorListener,
Accessible
{
……
}我觉得楼主是否可以自己也从JComponent继承一个类,也实现JTable的这些接口。然后再这个基础上实现自己需要的东西?
相当于自己写了一个JTable类。我以前做过类似的项目。好象当初我的那帮同事就是这个做的。在第一个框里输入字符,然后回车就自动跳到下一个框。我想也应该和楼主提出的要求类似。仅提出一个想法。请大家给个意见。谢谢!
难道和CellEditor有关?
在nwp123(风中浮云)代码的基础上,我加上了Shift+Enter键后退的功能
再次感谢!!import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class EditTable extends JFrame {
String[] colName = {"Col_0","Col_1", "Col_2"};
String[][] data ={
{"a1", "a2", "a3"},
{"b1", "b2", "b3"},
{"c1", "c2", "c3"}
};
JTable table = new JTable(data, colName);
public EditTable()
{
super("test");
setDefaultCloseOperation(EXIT_ON_CLOSE);
JScrollPane scrollPanel = new JScrollPane(table);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(scrollPanel, BorderLayout.CENTER);
this.getContentPane().add(panel);
setTable();
}
/**
* 设置表格回车键功能
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
private void setTable()
{
InputMap inputMap = table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
KeyStroke entry = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); KeyStroke sTab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB,1);
KeyStroke sEntry = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,1);
Object tabOperObject = inputMap.get(tab);
inputMap.remove(entry);
inputMap.put(entry, tabOperObject); Object sTabOperObject = inputMap.get(sTab);
inputMap.remove(sEntry);
inputMap.put(sEntry,sTabOperObject);
}
public static void main(String[] args)
{
EditTable frame = new EditTable();
frame.pack();
frame.setVisible(true);
}}再次感谢!!!
http://community.csdn.net/Expert/topic/3721/3721069.xml?temp=.5750849