JTable введите ключ - PullRequest
       0

JTable введите ключ

11 голосов
/ 01 февраля 2012

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

Действие заключается в том, чтобы ввести код товара в jTextField и нажать Enter key, деталиэтого кода должен прийти к jTable.И там я должен ввести количество и нажать Введите , чтобы рассчитать сумму.Но теперь, указав код товара, детали доходят до jTable, и я могу ввести количество, но там, нажав Ввод , клавиша jTable, фокус переходит к следующей строке, и вычисления не выполняются.Но при повторном нажатии Enter на клавиатуре 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);

Ответы [ 2 ]

28 голосов
/ 01 февраля 2012

Значение по умолчанию Связывание клавиш для Ввод - это действие 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) {
        ...
    }
}

См. Также Связывания клавиатуры в Swing (отражено на web.archive.org).

Приложение: Вы можете найти больше примеров здесь , здесь и здесь ;последний является JTable специфичным.

0 голосов
/ 19 июля 2016

Вы можете использовать лямбда-функции 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 класс должен быть таким:

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...