1
여기 내 문제가 있습니다. 변수 rect
은 마우스 동작을 사용하여 움직일 수 없습니다. 내가 도대체 뭘 잘못하고있는 겁니까? 아마도 나는 MouseListener
이 어떻게 작동하는지 제대로 이해하지 못했습니다.핑퐁을 움직이는 직사각형을 얻는 방법?
public class CreppyRectangle extends JComponent {
private int viteza = 15;
private int yPosL = 100;
Rectangle2D rect;
Graphics2D g3d;
int lungimea = 40;
int latimea = 10;
int x = 0;
int y = 100;
public static void main(String[] args) {
new CreppyRectangle();
}
public CreppyRectangle() {
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
});
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e) {
yPosL = e.getX();
repaint(x, e.getX(), latimea, lungimea);
System.out.println(e.getX());
}
});
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Testing");
final TestPane misha = new TestPane(Color.BLACK);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(misha);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private int xPos;
private int yPos;
private int size = 10 ;
private int xDelta = 5;
private int yDelta = 5;
public TestPane(Color foreground) {
setForeground(foreground);
Timer timer = new Timer(viteza , new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
xPos += xDelta;
yPos += yDelta;
if (xPos < 10) {
xPos = 10;
xDelta *= -1;
System.out.println(xDelta);
} else if (xPos + size > getWidth()) {
xPos = getWidth() - size;
xDelta *= -1;
} else if (yPos < 0) {
yPos = 0;
yDelta *= -1;
System.out.println(xDelta);
} else if (yPos + size > getHeight()) {
yPos = getHeight() - size;
yDelta *= -1;
}
repaint();
}
});
timer.setRepeats(true);
timer.setCoalesce(true);
timer.start();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 200);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g3d = (Graphics2D) g.create();
rect = new Rectangle2D.Double(x, yPosL, latimea, lungimea);
g3d.draw(rect);
g3d.fill(rect);
g2d.setColor(getForeground());
g2d.drawRect(xPos, yPos, size, size);
g2d.fillRect(xPos, yPos, size, size);
g2d.dispose();
}
}
}
보조 메모로 - 앞으로는 중간 통제가 필요할 것입니다. 이렇게하면 컨트롤 구성표를 쉽게 바꿀 수 있습니다 (예 : 키보드 컨트롤). 그렇게하지 않으면 xbox 360 컨트롤러에서만 작동하는 모든 Windows 게임과 같이 잠긴 컨트롤이 생길 수 있습니다. –