2012-02-01 8 views
9

在庫管理のためにjTableを使用してアプリケーションを開発しています。JTable enter keys

アクションがjTextField内のアイテムコードを入力して、そして Enterキーを押すことで、そのコードの詳細は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) { 
     ... 
    } 
} 

は(web.archive.orgでミラー)もKeyboard Bindings in Swingを参照してください。

補遺:あなたはより多くの例hereherehereを見つけることができます。最後はJTableです。

+0

おかげで私はあなたが私はstep..iは完全に混乱していますで、このコードのステップを追加する必要がどのように私かを教えてくださいすることができ、心をいけないbinding..Ifキーについて多くを知りません。 。 – Luna

+0

はい、最初はちょっと混乱します。私はチュートリアルを読んでいくつかの例を試してみると役に立ちました。上記より。 – trashgod

+0

ok ..あなたの返信に感謝します。私は試してみます... – Luna

0

java 8ラムダ関数を使用できます。

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クラスは以下のようにする必要があります。

パッケージcom.ozpas.entegre.controller; reply..Butため

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; 
    } 

}