2013-12-23 54 views
0

有沒有什麼方法可以讓我的橢圓消失一旦我點擊它。 因爲While循環總是在運行,因此repaint()也是這樣,所以在這種情況下,我無法理解在哪裏以及如何使用Mouse Listener。 在此先感謝。運動中的圖形對象的鼠標偵聽器

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.RenderingHints; 
import java.awt.Toolkit; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

@SuppressWarnings("serial") 
public class Game extends JPanel { 

int x,y; 
int offset=400; 

int i;     //j; 
private void moveBall() { 
    double degrees=(double) i; 
    double radians=Math.toRadians(degrees); 
    double Sinu=Math.sin(radians); 
    double Sinu200=Math.sin(radians)*300; 
    int SinuInt=(int) Sinu200; 
    y=offset+SinuInt; 
    double Cos=Math.cos(radians); 
    double Cos200=Math.cos(radians)*300; 
    int CosInt=(int) Cos200; 
    x=offset+CosInt; 

    i++; // j--; 
    if (i==360) i=0; 
       } 


private int sin(double radians) { 
    // TODO Auto-generated method stub 
    return 0; 
} 


    @Override 
public void paint(Graphics g) { 
    super.paint(g); 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
    g2d.setColor(Color.red); 
    g2d.fillOval(x, y, 50, 50); 


} 

    public static void main(String[] args) throws InterruptedException { 
    JFrame frame = new JFrame("Rolling album"); 
    Game game = new Game(); 
    game.i=90; 
    frame.add(game); 
    frame.setSize(1100, 1000); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    while (true) { 
     game.moveBall(); 
     game.repaint(); 
     Thread.sleep(30); 

    } 
} 


} 
+0

1)不要擋住EDT。使用Swing Timer來調用'repaint()'2)'JPanel'中自定義繪畫的正確方法是'paintComponent(Graphics)'3)應該爲遊戲設置一個首選大小,而不是將大小設置爲框架。 4)應該在EDT上構建和更改Swing GUI。 –

回答

1
  1. 創建一個圓形Ellipse2D
  2. 試驗ellipse.contains(x,y)
1

在你的函數:

@Override 
public void paint(Graphics g) { 
    super.paint(g); 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
    g2d.setColor(Color.red); 
    g2d.fillOval(x, y, 50, 50); 
} 

此行g2d.fillOval(x, y, 50, 50);是什麼是真正的畫在每個重繪圈。

如果您的mouseListener在圈子中獲得點擊(使用Andrew的答案),您可能需要使用一些標誌來查看它是否被點擊。

if (!ovalClicked) 
{ 
    g2d.setColor(Color.red); 
    g2d.fillOval(x, y, 50, 50); 
} 

(這將是更好地使用paintComponent()而非paint()

+0

謝謝,我用而不是。 – NatiLevi

相關問題