Отмена выбора таблицы при нажатии клавиши выхода - PullRequest
0 голосов
/ 03 июня 2018

Я пишу проект Swing на Java, и недавно наткнулся на проблему.

У меня есть 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 голосов
/ 03 июня 2018

См. Как использовать привязки клавиш .Вот кое-что для начала:

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 ");
    }
}
0 голосов
/ 03 июня 2018

Вам необходим GUI-компонент, такой как JTextField, который может зарегистрировать KeyListener и запрограммировать правильное действие: см. документацию .

Что-то вроде:

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

Вы можете зарегистрировать прослушиватель клавиш для других компонентов, таких как кнопки и панели.

...