JTable输入密钥
我正在使用jTable
开发一个用于库存管理的应用程序。
操作是,通过在jTextField
键入项目代码并按Enter键,该代码的详细信息应该转到jTable
。 在那里,我必须输入数量,然后按Enter键计算金额。 但是现在通过给项目代码详细信息来到jTable
,我可以输入数量,但是按Enter键jTable
焦点转到下一行并且没有进行计算。 但是,再次按下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; } }