我正在用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;
}
}
});
答案 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
}
);
您也可以为按钮和面板等其他组件注册一个键监听器。