2012-02-01 6 views
9

재고 관리를 위해 jTable을 사용하여 응용 프로그램을 개발 중입니다.JTable Enter 키

조치가 jTextField에서 항목 코드를 입력하고 Enter 키를 눌러이며, 그 코드의 세부 사항은 jTable에 와서해야합니다. 그리고 수량과 수량을 입력해야합니다. 금액을 계산하려면을 입력하십시오. 하지만 지금은 항목 코드를 제공함으로써 jTable의 세부 정보를 얻을 수 있습니다.하지만 수량을 입력 할 수 있습니다. jTable 포커스를 입력하면 아무런 계산도 수행되지 않습니다. 그러나 다시 을 누름으로써 jTextField 키를 입력하면 마지막으로 입력 한 금액이 계산됩니다. 나는 자바 초보자로서이 문제를 해결하는 방법을 모른다. 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

덕분에 난 당신이 내가 step..i 완전히 혼란 스러워요하여이 코드 단계를 추가 할 필요가 어떻게 나 또는를 알려 주시기 바랍니다 수 있습니다 마음을 해달라고 binding..If 키에 대해 잘 몰라요. – Luna

+0

예, 조금 혼란 스럽습니다. 튜토리얼을 읽고 몇 가지 예제를 시도해 보는 것이 도움이된다는 것을 알았습니다. 이상. – trashgod

+0

ok .. 고맙습니다. 답장을 드리겠습니다 ... – Luna

0

자바 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())); 

이고 위임 클래스는 아래와 같아야합니다.

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

}