2014-01-19 38 views
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(); 
    } 
} 
} 
+0

作为一个方面说明 - 在未来,你可能会需要一些中间控制。这可以让控制方案更容易交换(比如说,键盘控制)。如果不这样做,可能会导致锁定控件,就像所有那些仅适用于Xbox 360控制器的Windows游戏一样。 –

回答

3

基本上,你从来没有真正加入到CreppyRectangle任何东西,因此,没有什么能够侦听鼠标事件。

你的设置有点奇怪。我不知道为什么你从JComponent,延长困扰时,你应该把所有的逻辑到您的TestPane

另外,我不认为你想做yPosL = e.getX(),我想你想尝试yPosL = e.getY()而不是