Jpanel (p)、Jframe (f)、およびこのラベル (cursorlbl) があり、矢印キーで移動したいと考えています。私は goLeft() メソッドで賢明だと思うことをしました...しかし、それは機能していません。
このクラスの先頭にある cursx という static into があり、コードは main にあります。JLabel に ImagIcon を含む cursorlbl という名前を付けます。これを final と宣言したので、キーバインド関数から参照できます。
左矢印キーを押すたびに、cursorlbl が消えて、TableLayout に 1 つ上のスペースが表示されるようにします ( 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);