JTable输入密钥

我正在使用jTable开发一个用于库存管理的应用程序。

操作是,通过在jTextField键入项目代码并按Enter键,该代码的详细信息应该转到jTable 。 在那里,我必须输入数量,然后按Enter键计算金额。 但是现在通过给项目代码详细信息来到jTable ,我可以输入数量,但是按EnterjTable焦点转到下一行并且没有进行计算。 但是,再次按下jTextField上的Enter键,将计算最后输入的金额。 我不知道如何解决这个问题,因为我是Java的初学者。 我在Netbeans中使用MySQL和Java。

我在下面给出了这个代码..

谢谢..

 jTable1.editCellAt(serialNumber, 2); jTable1.getCellSelectionEnabled(); value1 = new Double(jTable1.getValueAt(serialNumber, 2).toString()); value = new Double(jTable1.getValueAt(serialNumber, 3).toString()); double result = value1 * value; jTable1.setValueAt(result, serialNumber, 4); 

Enter的默认键绑定是表的WHEN_ANCESTOR_OF_FOCUSED_COMPONENT输入映射中的selectNextRowCell操作。 您可以替换自己的操作,如下所述。

 private static final String solve = "Solve"; KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(enter, solve); table.getActionMap().put(solve, new EnterAction()); ... private class EnterAction extends AbstractAction { @Override public void actionPerformed(ActionEvent e) { ... } } 

另请参阅Swing中的键盘绑定 (在web.archive.org上镜像)。

附录:你可以在这里 , 这里和这里找到更多的例子; 最后一个是JTable特定的。

您可以使用Java 8 lambda函数:

 final String tustakmaad = "Solve"; KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); panel.getTblBelgetarihiliste().getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put( enter, tustakmaad); panel.getTblBelgetarihiliste().getActionMap().put(tustakmaad, new DelegateAction( ae -> eventMytable_enterkey())); 

DelegateAction类应该是这样的:

 package com.ozpas.entegre.controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractAction; public class DelegateAction extends AbstractAction { /** * */ private static final long serialVersionUID = 1L; ActionListener myaction = (ae) -> { System.out.println("empty action"); }; public DelegateAction(ActionListener customaction) { this.myaction = customaction; } @Override public void actionPerformed(ActionEvent e) { myaction.actionPerformed(e); } public ActionListener getMyaction() { return myaction; } public void setMyaction(ActionListener myaction) { this.myaction = myaction; } }