简体   繁体   English

如何使用JPanel和Jframe在相对(X,Y)上进行鼠标事件

[英]how to make mouse events on (X,Y) relative using JPanel and Jframe

i am trying to draw dots using mouse listener, when clicking on a panel i am drawing a dot, then if i expend i want to keep it relatively in the same place to the panel.我试图使用鼠标侦听器绘制点,在面板上单击时我在绘制点,然后,如果我消费了,我希望将其相对地保持在面板的同一位置。 i tried to divide the x by getWidth and y by getHeight but it is don't work also the opposite way.我试图将x除以getWidth并将y除以getHeight,但它也不起作用,反之亦然。

here a little peak to the code, thx for the helpers :)这里的代码有点高峰,对于助手们来说是非常好的:)

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.JPanel;

public class Grid extends JPanel {

    private ArrayList<Point> graph;

    public Grid() {
        this.graph = new ArrayList<Point>();
        addMouseListener(new Listener());
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (graph.size() != 0) {
            if (graph.size() == 1) {
                Point temp = graph.get(0);
                g.drawOval(temp.getX(), temp.getY(), 3, 3);
            } else {
                for (int i = 0; i < graph.size() - 1; i++) {
                    Point temp = graph.get(i);
                    Point next = graph.get(i + 1);
                    g.drawOval(temp.getX(), temp.getY(), 3, 3);
                    g.drawOval(next.getX(), next.getY(), 3, 3);
                    g.drawLine(temp.getX(), temp.getY(), next.getX(), next.getY());
                }
            }
        }
    }

    private class Listener implements MouseListener {

        @Override
        public void mouseClicked(MouseEvent e) {
            graph.add(new Point(e.getX(), e.getY()));
            repaint();

        }

        @Override
        public void mousePressed(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub

        }
    }
 }

i am trying to draw dots using mouse listener, when clicking on a panel i am drawing a dot, then if i expend i want to keep it relatively in the same place to the panel.我试图使用鼠标侦听器绘制点,在面板上单击时我在绘制点,然后,如果我消费了,我希望将其相对地保持在面板的同一位置。 i tried to divide the x by getWidth and y by getHeight but it is don't work also the opposite way.我试图将x除以getWidth并将y除以getHeight,但它也不起作用,反之亦然。

here a little peak to the code, thx for the helpers :)这里的代码有点高峰,对于助手们来说是非常好的:)

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.JPanel;

public class Grid extends JPanel {

    private ArrayList<Point> graph;

    public Grid() {
        this.graph = new ArrayList<Point>();
        addMouseListener(new Listener());
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (graph.size() != 0) {
            if (graph.size() == 1) {
                Point temp = graph.get(0);
                g.drawOval(temp.getX(), temp.getY(), 3, 3);
            } else {
                for (int i = 0; i < graph.size() - 1; i++) {
                    Point temp = graph.get(i);
                    Point next = graph.get(i + 1);
                    g.drawOval(temp.getX(), temp.getY(), 3, 3);
                    g.drawOval(next.getX(), next.getY(), 3, 3);
                    g.drawLine(temp.getX(), temp.getY(), next.getX(), next.getY());
                }
            }
        }
    }

    private class Listener implements MouseListener {

        @Override
        public void mouseClicked(MouseEvent e) {
            graph.add(new Point(e.getX(), e.getY()));
            repaint();

        }

        @Override
        public void mousePressed(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub

        }
    }
 }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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