2014-01-19 39 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()而不是