如何使用无线电100在Java Swing中创建一个圆并使用鼠标事件添加:
当鼠标指针进入圆圈时,它应显示“鼠标输入”消息
这是我到目前为止所能做的:
package Circle;
import java.awt.Graphics;
import javax.swing.JFrame;
import java.awt.Color;
public class Circle extends JFrame
{
public Circle()
{
setTitle("Tutorial");
setSize(1960,1960);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void paint(Graphics g)
{
g.setColor(Color.BLACK);
g.drawOval(500,500,500,500);
g.fillOval(500, 500, 500, 500);
}
public static void main(String args[])
{
Circle t = new Circle();
t.paint(null);
}
}
答案 0 :(得分:2)
这是一个有几个注释的例子:
1-您不需要展开{{1}},请使用自定义JFrame
并将其设置为框架的内容。
2-覆盖JPanel
而非paintComponent
,paint
负责绘制当前组件(您的面板)。
3-使用Shape对象(此处为paintComponent
),因为它有一个可爱的Ellipse2D.Double
方法。
4-向面板添加contains(int x,int y)
并检查鼠标移动的时间,以及鼠标的位置是否在您的形状内。
MouseMotionListener
答案 1 :(得分:0)
您可以向JFrame添加MouseMotionListener。它包含一个方法 void mouseMoved(MouseEvent),您可以使用它来计算鼠标指针在圆圈内的位置。使用MouseEvent.getX()和MouseEvent.getY()以及圆圈的边界来执行此操作。
更简单的方法是使用Ellipse2D。使用圆的边界初始化嵌套的静态类Ellipse2D.Double或Ellipse2D.Float,并调用方法包含(x,y)以验证给定点是否在圆内。 提示:椭圆的宽度和高度是圆圈的 u 的两倍。
您不应该直接调用paint(null),因为它会在方法中抛出NullPointerException。反而更容易使用repaint()。
编辑:有关详细示例,请参阅伯杰的答案。