2012-02-01 220 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; 
    } 

}