栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在鼠标拖动时移动Ellipse2D

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在鼠标拖动时移动Ellipse2D

因此,通过浏览JavaDocs
for

Ellipse2D

很显然,
Ellipse2D
它不会公开公开
x
/
y
属性。

相反,您必须改用其中一种

setframe
方法。

此示例是对示例的稍作修改,该示例决定了

mousePressed
事件发生时应移动哪个椭圆,因为在我看来,在
mouseDragged
事件内进行此操作没有任何意义,除非您希望接听所有的椭圆。它还在“点击”点和椭圆的位置之间定义了一个偏移量,以使它们不会“跳转”到鼠标的位置。

import java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Shape;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.geom.Ellipse2D;import java.awt.geom.Point2D;import java.awt.geom.Rectangle2D;import java.util.ArrayList;import java.util.List;import javax.swing.Jframe;import javax.swing.JPanel;public class Sample extends Jframe implements MouseListener, MouseMotionListener {    JPanel MainPane;    Container contentPane;    ArrayList<Ellipse2D> redEl = new ArrayList<Ellipse2D>();    ArrayList<Ellipse2D> whiteEl = new ArrayList<Ellipse2D>();    Ellipse2D el1 = new Ellipse2D.Double(120, 110, 50, 50);    Ellipse2D el2 = new Ellipse2D.Double(250, 110, 50, 50);    Ellipse2D el3 = new Ellipse2D.Double(390, 110, 50, 50);    Ellipse2D el4 = new Ellipse2D.Double(540, 110, 50, 50);    Ellipse2D el5 = new Ellipse2D.Double(120, 390, 50, 50);    Ellipse2D el6 = new Ellipse2D.Double(250, 390, 50, 50);    Ellipse2D el7 = new Ellipse2D.Double(390, 390, 50, 50);    Ellipse2D el8 = new Ellipse2D.Double(540, 390, 50, 50);    int x;    int y;    private Point2D.Double offSet;    public Sample() {        redEl.add(el1);        redEl.add(el2);        redEl.add(el3);        redEl.add(el4);        whiteEl.add(el5);        whiteEl.add(el6);        whiteEl.add(el7);        whiteEl.add(el8);        MainPane = new JPanel() { public void paintComponent(Graphics g) {     super.paintComponent(g);     Graphics2D g2 = (Graphics2D) g;     for (Shape red : redEl) {         g2.setColor(Color.RED);         g2.fill(red);         g2.draw(red);     }     for (Shape white : whiteEl) {         g2.setColor(Color.WHITE);         g2.fill(white);         g2.draw(white);     } }        };        MainPane.setBackground(Color.BLACK);        contentPane = this.getContentPane();        contentPane.add(MainPane);        MainPane.setLayout(null);        setVisible(true);        setSize(701, 701);        setResizable(false);        setLocationRelativeTo(null);        setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        MainPane.addMouseListener(this);        MainPane.addMouseMotionListener(this);    }    private Ellipse2D selected = null;    public void mousePressed(MouseEvent e) {        x = e.getX();        y = e.getY();        List<Ellipse2D> all = new ArrayList<>(redEl);        all.addAll(whiteEl);        for (Ellipse2D el : all) { if (el.contains(x, y)) {     selected = el;     offSet = new Point2D.Double(x - el.getX(), y - el.getY());     break; }        }    }    public void mouseClicked(MouseEvent e) {        selected = null;    }    public void mouseReleased(MouseEvent e) {    }    public void mouseEntered(MouseEvent e) {    }    public void mouseExited(MouseEvent e) {    }    public void mouseDragged(MouseEvent e) {        if (selected != null) { double x = e.getX() - offSet.x; double y = e.getY() - offSet.y; Rectangle2D bounds = selected.getBounds2D(); bounds.setframe(new Rectangle2D.Double(x, y, bounds.getWidth(), bounds.getHeight())); selected.setframe(bounds); repaint();        }    }    public void mouseMoved(MouseEvent e) {    }    public static void main(String args[]) {        new Sample();    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418617.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号