我有一个 Jpanel (p)、一个 Jframe (f) 和这个标签 (cursorlbl),我想通过箭头键四处移动。我已经在 goLeft() 方法中做了我认为合理的事情......但它不起作用。
我在这个类的顶部有一个名为 cursx 的静态文件,代码在 main.js 中。有一个名为 cursorlbl 的带有 ImagIcon 的 JLabel - 我将其声明为 final,因此我的键绑定函数可以看到它。
每当我按下左箭头键时,我希望 cursorlbl 消失并在我的 TableLayout 中出现一个空格(来自http://java.sun.com/products/jfc/tsc/articles/tablelayout)
现在,作为一大块我将在下面的节目中发布,我尝试通过以下方式:
p.remove(cursorlbl);
cursx++; //static var im using to keep track of the cursor
p.revalidate();
p.repaint();
p.add(cursorlbl, Integer.toString(cursx) +" ," + Integer.toString(cursy));
p.revalidate();
p.repaint();
但这似乎并不适合我的小组。GUI 没有更新到正确的位置——我不知道为什么。
这是我的一大块代码,它要大得多。
final ImageIcon cursor = new ImageIcon("cursor.gif");
final JLabel cursorlbl = new JLabel("", cursor, JLabel.CENTER);
p.add( cursorlbl, Integer.toString(cursx) +" ," + Integer.toString(cursy));
p.revalidate();
p.repaint();
f.setVisible(true);
Action goRight = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("right");
//p.remove(cursorlbl);
//p.revalidate();
//p.repaint();
}
};
Action goLeft = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
cursx++;
p.remove(cursorlbl);
p.revalidate();
p.repaint();
p.add(cursorlbl, Integer.toString(cursx) +" ," + Integer.toString(cursy));
p.revalidate();
p.repaint();
}
};
p.setFocusable(true);
p.getInputMap().put(KeyStroke.getKeyStroke("RIGHT"),
"pressed right");
p.getInputMap().put(KeyStroke.getKeyStroke("LEFT"),
"pressed left");
p.getInputMap().put(KeyStroke.getKeyStroke("UP"),
"pressed up");
p.getInputMap().put(KeyStroke.getKeyStroke("DOWN"),
"pressed down");
p.getActionMap().put("pressed right", goRight);
p.getActionMap().put("pressed left", goLeft);
p.getActionMap().put("pressed up", goUp);
p.getActionMap().put("pressed down", goDown);