[英]how create a circle in java swing of radios 100 and add mouse event
如何在Java Swing中使用收音机100创建一个圆并使用鼠标事件添加一个圆:
当鼠标指针进入圆圈时,它应该显示消息“ mouse enter”
到目前为止,这是我可以做的:
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);
}
}
这是一个带有一些注释的示例:
1-您不需要扩展JFrame
,使用自定义的JPanel
并将其设置为框架的内容。
2-覆盖paintComponent
而不是paint
, paintComponent
负责绘制当前组件(面板)。
3-使用Shape对象(此处为Ellipse2D.Double
),因为它具有可爱的contains(int x,int y)
方法。
4-在面板上添加MouseMotionListener
,并检查何时移动鼠标(如果鼠标的位置在形状内)。
5-在事件分配线程中显示框架
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
// see note 1
public class CirclePanel extends JPanel {
// see note 3
Ellipse2D circle = new Ellipse2D.Double(0, 0, 100, 100);
public CirclePanel() {
// see note 4
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(final MouseEvent e) {
if (circle.contains(e.getX(), e.getY())) {
System.out.println("Mouse entered");
}
}
});
}
// see note 2
@Override
protected void paintComponent(final Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.BLACK);
g2d.draw(circle);
}
public static void main(final String args[]) {
// see note 5
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
CirclePanel t = new CirclePanel();
frame.getContentPane().add(t);
frame.setTitle("Tutorial");
frame.setSize(150, 150);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
}
您可以将MouseMotionListener添加到JFrame。 它包含一个void mouseMoved(MouseEvent)方法 ,您可以使用该方法来计算鼠标指针是否位于圆内。 使用MouseEvent.getX()和MouseEvent.getY()以及圆的边界来做到这一点。
一种更简单的方法是使用Ellipse2D 。 使用圆的边界初始化嵌套的静态类Ellipse2D.Double或Ellipse2D.Float,然后调用方法contains(x,y)验证给定点是否在圆内。 提示:椭圆的宽度和高度的两倍大的拉迪美你的圈子中。
您不应该直接调用paint(null),因为它将在方法内引发NullPointerException。 改用repaint()更容易。
编辑:有关详细示例,请参阅Berger的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.