1
这是我的问题,我不能让我的Rectangle2D
变量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游戏一样。 –