java:在Jtable中如何实现按Enter键之后换到下一行进行编辑?
1个回答
展开全部
//第一种方法
public class Test extends JFrame{
private JPanel contentPane;
private JTable table;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Test frame = new Test();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 705, 502);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
table = new JTable() ;
table.setModel(new DefaultTableModel(
new Object[][] {
{"a", "b", "c", "d"},
{"e", "f", "g", "h"},
},
new String[] {
"New column", "New column", "New column", "New column"
}
));
table.setFillsViewportHeight(true);
contentPane.add(table, BorderLayout.CENTER);
//主要实现代码这往下
TableCellEditor tce= table.getDefaultEditor(JTable.class);
tce.addCellEditorListener(new CellEditorListener() {
@Override
public void editingStopped(ChangeEvent arg0) {
// TODO Auto-generated method stub
System.out.println("结束编辑,自动转入下一行");
table.editCellAt(table.getSelectedRow()+1,table.getSelectedColumn());
}
@Override
public void editingCanceled(ChangeEvent arg0) {
// TODO Auto-generated method stub
System.out.println(arg0);
}
});
table.setCellEditor(tce);
}
}
//第二种方法,只回行进入编辑的话,推荐此方法,简单
table.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {
if(e.getKeyChar()=='\n'){
table.editCellAt(table.getSelectedRow(),table.getSelectedColumn());
}
}
public void keyPressed(KeyEvent e) {}
});
不过, jtable默认情况貌似就是自动往下行走哇!好像只是走到下行没进入编辑状态罢了
追问
jtable默认情况下好像是自动往下行走的,但我想要的效果是:当你编辑完最后一行的最后一列时,按个回车,自动添加一行,并让改行的第一列获得焦点
追答
// 在进入编辑状态下才自动加行,未进入编辑直接输出修改不换行
table.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent e) {
if (e.getKeyChar() == '\n') {
if (table.getSelectedColumn() >= table.getColumnCount() - 1
&& table.getSelectedRow() >= table.getRowCount() - 1) {
table.editCellAt(table.getSelectedRow(),
table.getSelectedColumn());
((DefaultTableModel) table.getModel())
.addRow(new Object[table.getColumnCount()]);
table.editCellAt(table.getRowCount() - 1, 0);
}
}
}
});
上面只是摘要,因为字数超了,见附件吧,附件的源码里有处理两种状态自动新增加行的例子
一种是TABLE在编辑状态,一种是在UI下直接修改回车时的状态
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询