繁体   English   中英

如何在Radios 100的Java Swing中创建一个圆圈并添加鼠标事件

[英]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而不是paintpaintComponent负责绘制当前组件(面板)。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM