JFrame
에서 왼쪽 또는 오른쪽으로 사각형을 이동하려고합니다. 그러나 화살표 버튼을 사용하면 막대가 움직이지 않습니다. 그것은 단지 연장입니다. 직사각형은 Brick Breaker 유형의 게임을위한 것입니다. 이미 그린 영역을 유지 -JFrame의 이동 문제
public class main
{
public static void main(String[] args)
{
JFrame obj = new JFrame("Brick Breacker");
obj.setBounds(50,50,1200,900);
obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
obj.setVisible(true);
Grafica grafica = new Grafica();
obj.add(grafica);
}
}
public class Grafica extends JPanel implements ActionListener , KeyListener
{
Timer tm = new Timer(0,this);
boolean play = false;
int playerX = 550;
int playerXs = 0;
public Grafica()
{
tm.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paint (Graphics g)
{
//paddle
g.setColor(Color.GREEN);
g.fillRect(playerX, 800, 145, 10);
//borders
g.setColor(Color.BLACK);
g.fillRect(0, 0, 5, 900);
g.fillRect(1180, 0, 5, 900);
g.fillRect(1200, 0, -1200, 5);
g.setColor(Color.RED);
g.fillRect(1200, 860, -1200, 5);
//ball
g.setColor(Color.blue);
g.fillOval(550,700, 26, 26);
}
public void actionPerformed(ActionEvent e)
{
playerX = playerX + playerXs;
repaint();
}
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
playerXs = 0;
}
public void keyPressed(KeyEvent e)
{
int c = e.getKeyCode();
if(c == KeyEvent.VK_RIGHT)
{
if(playerX > 850)
{
playerX = 850;
} else
{
moveRight();
}
}
if(c == KeyEvent.VK_LEFT)
{
if(playerX > 850)
{
playerX = 850;
} else
{
moveLeft();
}
}
}
public void moveRight()
{
play = true;
playerX+=20;
}
public void moveLeft()
{
play = true;
playerX-=20;
}
}
https://docs.oracle.com/javase/tutorial/uiswing/painting/을 읽으십시오. paint는 아니고 paintComponent를 오버 라이드 (override) 할 필요가있어, 그 메소드의 구현은, 아무것도 실시하기 전에 super.paintComponent를 호출 할 필요가 있습니다. – VGR