Java 运动中图形对象的鼠标侦听器
有没有什么方法可以让椭圆形在我点击后消失。 在这种情况下,我无法理解在何处以及如何使用鼠标侦听器,因为While循环总是在运行,因此repaint()也是如此。 提前谢谢Java 运动中图形对象的鼠标侦听器,java,swing,graphics,mouselistener,thread-sleep,Java,Swing,Graphics,Mouselistener,Thread Sleep,有没有什么方法可以让椭圆形在我点击后消失。 在这种情况下,我无法理解在何处以及如何使用鼠标侦听器,因为While循环总是在运行,因此repaint()也是如此。 提前谢谢 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
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);
}
}
}
椭圆。包含(x,y)
@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)代码>是在每次重新绘制时实际绘制圆的内容
如果你的鼠标听写器在圆圈中被点击(使用Andrew的答案),你可能需要使用一些标志来查看它是否被点击
if (!ovalClicked)
{
g2d.setColor(Color.red);
g2d.fillOval(x, y, 50, 50);
}
(最好使用paintComponent()
而不是paint()
)1)不要阻塞EDT。使用Swing计时器来调用repaint()
2)在JPanel
中进行自定义绘制的正确方法是paintComponent(Graphics)
3)应为游戏设置首选大小,而不是为帧设置大小。4) Swing GUI应该在EDT上构建和更改。谢谢,我使用了。