Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JPanel和Jframe使(X,Y)上的鼠标事件相对_Java_Swing_Jframe_Jpanel - Fatal编程技术网

Java 如何使用JPanel和Jframe使(X,Y)上的鼠标事件相对

Java 如何使用JPanel和Jframe使(X,Y)上的鼠标事件相对,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我试着用鼠标监听器画点,当我在面板上点击时,我画了一个点,如果我花费了,我想让它相对地保持在面板的相同位置。 我试着用getWidth除以x,用getHeight除以y,但结果是相反的 这里有一个小峰值的代码,thx的助手:) 导入java.awt.Color; 导入java.awt.Graphics; 导入java.awt.event.MouseEvent; 导入java.awt.event.MouseListener; 导入java.util.ArrayList; 导入javax.swing

我试着用鼠标监听器画点,当我在面板上点击时,我画了一个点,如果我花费了,我想让它相对地保持在面板的相同位置。 我试着用getWidth除以x,用getHeight除以y,但结果是相反的

这里有一个小峰值的代码,thx的助手:)

导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.util.ArrayList;
导入javax.swing.JPanel;
公共类网格扩展JPanel{
私有数组列表图;
公共电网(){
this.graph=new ArrayList();
addMouseListener(新侦听器());
}
公共组件(图形g){
超级组件(g);
if(graph.size()!=0){
if(graph.size()==1){
点温度=图形获取(0);
g、 drawOval(temp.getX(),temp.getY(),3,3);
}否则{
对于(int i=0;i
好的。我找到了答案。每次在Point类中使用paintComponent时,我都会记住相对数,然后乘以该相关数,每次都可以保存正确的关系

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

        }
    }
 }