JTable enter key

一曲冷凌霜 提交于 2019-12-28 02:06:28

问题


I am developing an application using jTable for inventory management.

The action is, by typing the item code in a jTextField and by pressing Enter key, the details of that code should come to jTable. And there I have to type the quantity and press Enter to calculate the amount. But now by giving item code the details come to the jTable, and I can type the quantity, but there by pressing Enter key jTable focus goes to the next row and no calculation is being done. But by again pressing Enter key on the jTextField the last entered amount is getting calculated. I don't know how to solve this problem as I am a beginner in Java. I am using MySQL and Java in Netbeans.

I am giving that code below..

Thank You..

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

回答1:


The default Key Binding for Enter is the selectNextRowCell action in the table's WHEN_ANCESTOR_OF_FOCUSED_COMPONENT input map. You can substitute your own action, as outlined below.

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) {
        ...
    }
}

See also Keyboard Bindings in Swing (mirrored at web.archive.org).

Addendum: You can find more examples here, here and here; the last one is JTable specific.




回答2:


You can use Java 8 lambda functions:

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

and DelegateAction class should be like this:

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

}


来源:https://stackoverflow.com/questions/9091208/jtable-enter-key

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!