[英]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.