버튼을 누를 때마다 직사각형을 움직이는 코드 조각이 있습니다. 키를 누를 때마다 x 또는 y 좌표가 1 픽셀 씩 감소하거나 증가하도록 설정됩니다. 그러나, 만약 내가 같은 키를 두 번 이상 누르면, 그 자체로 어떻게 든 하나의 픽셀이 합성되고, 스택이 더 좋은 단어가 될 수 있고 기하 급수적으로 증가한다는 것을 알게되었습니다. 코드에서 왜이 작업을 수행하는지 알 수있는 내용이 있습니까?왜 내 변수가 기하 급수적으로 증가합니까?
public void paintComponent(Graphics g){
//..
addKeyListener(this); // adds another KeyListener
}
을 그리고 keyPressed
가 호출 될 경우 repaint();
의 모든 호출은 자신의 일을 할 것입니다 다른 KeyListener
을 추가
public class drawingComponent extends JComponent implements KeyListener
{
Rectangle hello = new Rectangle(300, 100, 50, 50);
public void paintComponent (Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.setColor(new Color(255, 25, 0));
g2.setFont(new Font("monospace", Font.BOLD + Font.ITALIC, 30));
g2.drawString("nothing yet", 300, 320);
g2.fill(hello);
setFocusable(true);
requestFocus();
addKeyListener(this);
}
@Override
public void keyPressed (KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_W)
{
hello.y = hello.y - 1;
hello.setLocation(hello.x, hello.y);
repaint();
System.out.println(hello.y);
}
if (e.getKeyCode() == KeyEvent.VK_S)
{
hello.y = hello.y + 1;
hello.setLocation(hello.x, hello.y);
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_A)
{
hello.x = hello.x - 1;
hello.setLocation(hello.x, hello.y);
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_D)
{
hello.x = hello.x + 1;
hello.setLocation(hello.x, hello.y);
repaint();
}
}
@Override
public void keyReleased (KeyEvent e)
{
}
@Override
public void keyTyped (KeyEvent e)
{
// TODO Auto-generated method stub
}
}
하여 들여 쓰기를 수정하신 후 How to Use Key Bindings보기 ... 필요하지 않습니다. –
"지수"는 "빨리"와 동의어가 아닙니다. – khelwood
고양이/개가 키보드를 통과하도록하여 코드를 포맷 했습니까? 가능한 코드를 모호하게 만드는 노력은 분명하지만 더 일반적인 형식 기술을 사용하는 것이 좋습니다. –