Java 如何使用JPanel和Jframe使(X,Y)上的鼠标事件相对
我试着用鼠标监听器画点,当我在面板上点击时,我画了一个点,如果我花费了,我想让它相对地保持在面板的相同位置。 我试着用getWidth除以x,用getHeight除以y,但结果是相反的 这里有一个小峰值的代码,thx的助手:)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
导入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
}
}
}