2012-02-01 4 views
9

Я разрабатываю приложение, используя jTable для управления запасами.JTable введите ключ

Действия, введя код элемента в jTextField и нажав Enter ключа, детали этого кода должны прийти к jTable. И там я должен ввести количество и нажать Введите чтобы рассчитать сумму. Но теперь, указав код товара, детали приходят к jTable, и я могу ввести количество, но там, нажав . Введите ключ jTable фокус переходит в следующую строку и никаких вычислений не делается. Но путем повторного нажатия Введите ключ на jTextField. Последняя введенная сумма рассчитывается. Я не знаю, как решить эту проблему, поскольку я новичок в Java. Я использую MySQL и Java в Netbeans.

Я даю этот код ниже ..

Спасибо ..

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 для Enter является selectNextRowCell действие в WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ввода карты таблицы. Вы можете заменить свое действие, как описано ниже.

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, here и here; последний - JTable.

+0

Спасибо за reply..But я не знаю много о ключе binding..If вы не возражаете Пожалуйста, вы можете сказать мне, где и как я должен добавить этот шаг код на step..i я совершенно запутался. – Luna

+0

Да, сначала это немного запутывает. Я нашел полезным прочитать учебники и попробовать несколько примеров; выше. – trashgod

+0

ok..thanks для вашего ответа..и попробую ... – 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())); 

и класс делегирования должен быть как указано ниже.

упаковка 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; 
    } 

} 
Смежные вопросы