按下退出键时取消表格选择

时间:2018-06-03 15:35:00

标签: java swing jtable key pressed

我正在用Java编写Swing项目,我最近偶然发现了一个问题。

我有一个JTable个物品(停车场满是汽车),这段代码改变了2个元素的位置。如果未选择汽车,请设置第一辆汽车的坐标。在下一次单击时,如果已经选择了汽车,则设置另一辆汽车的坐标。接下来,互换元素并删除坐标。

现在,我还必须实现“取消”我的选择的可能性,例如选择第一辆车后,如果按下某个键,则应删除该选择。任何想法我怎么能这样做?

    jt.addMouseListener(new java.awt.event.MouseAdapter() {
        int y1 = -1;
        int x1 = -1;
        public void mouseReleased(java.awt.event.MouseEvent e) {
            if(x1 == -1 && y1 == -1) {
                y1 = jt.rowAtPoint(e.getPoint());
                x1 = jt.columnAtPoint(e.getPoint());
            } 
            else {
                int y2 = jt.rowAtPoint(e.getPoint());
                int x2 = jt.columnAtPoint(e.getPoint());

                Car tmp = (Car)carpark[y1][x1];
                carpark[y1][x1] = carpark[y2][x2];
                carpark[y2][x2] = tmp;

                model.fireTableDataChanged();

                x1 = -1;
                y1 = -1;
                y2 = -1;
                x2 = -1;
            }
        }
    });

2 个答案:

答案 0 :(得分:1)

How to Use Key Bindings
这是让你入门的东西:

InputMap im = table.getInputMap();
ActionMap am = table.getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel");
am.put("cancel", new CancelAction());

CancelAction的定义是:

class CancelAction extends AbstractAction {

    @Override
    public void actionPerformed(ActionEvent e) {
       System.out.println("esc button pressed ");
    }
}

答案 1 :(得分:0)

您需要一个GUI组件,如JTextField,它可以注册KeyListener并编写正确的操作:请参阅documentation

类似的东西:

JTextField tf = new JTextField();
tf.addKeyListener(
    new KeyListener() {
            void keyPressed(KeyEvent e) {
                // your stuff here
            }
            // other methods must be overriden
    }
);

您也可以为按钮和面板等其他组件注册一个键监听器。