我有一個Jpanel(p),一個Jframe(f)和這個標籤(cursorlbl),我想通過箭頭鍵移動。我已經完成了我認爲在goLeft()方法中是明智的...但它不起作用。Java Swing&Key Binding - 重繪我的光標
我在這個類的頂部有一個名爲cursx的靜態代碼,並且代碼在main中。有一個名爲cursorlbl的ImagIcon的JLabel - 我聲明它是最終的,所以我的keybind函數可以看到它。
每當我按左方向鍵,我想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);
我們能否看到tablelayout? – MadProgrammer 2012-07-12 20:14:41