2012-02-01 113 views
9

我正在开发一个应用程序,使用jTable进行库存管理。JTable输入密钥

的动作是,通过键入一个jTextField的项目代码,并按下回车关键,该代码的细节应该来jTable。在那里,我必须键入数量并按输入来计算金额。但现在通过给项目代码的细节来到jTable,我可以键入数量,但通过按输入jTable焦点转到下一行并且没有进行计算。但再次按输入jTextField上次输入的金额正在计算中。我不知道如何解决这个问题,因为我是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); 

回答

24

默认Key Binding输入是在表的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) { 
     ... 
    } 
} 

另请参阅Keyboard Bindings in Swing(镜像在web.archive.org)。

附录:您可以找到更多示例here,herehere;最后一个是JTable具体。

+0

感谢reply..But我不知道很多关于关键binding..If你不介意,你能告诉我在哪里或如何通过有很step..i完全混淆添加此代码一步。 – Luna 2012-02-02 09:25:22

+0

是的,起初有点混乱。我发现阅读教程并尝试一些示例很有帮助;更上面。 – trashgod 2012-02-02 13:47:39

+0

好的..谢谢你的回复..我会试试... – Luna 2012-02-08 10:38:47

0

您可以使用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; 
    } 

}