我的程序涉及绘制三角形,我点击它们。根据比例因子变换鼠标坐标 - java swing
有两个类,Ecad和Line类。 Ecad是主框架,Line类用于绘制线条。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Ecad extends JFrame implements MouseListener{
ArrayList<Line2> lines=new ArrayList();
public Ecad(){
this.setVisible(true);
this.setSize(600,400);
this.addMouseListener(this);
}
public void mouseReleased(MouseEvent me){
Point p1,p2,p3;
int X=me.getX();
int Y=me.getY();
p1=new Point(X,Y);
p2=new Point((int)(p1.getX()-100),(int)(p1.getY()+(1.732/2*200)));
p3=new Point((int)(p1.getX()+100),(int)(p1.getY()+(1.732/2*200)));
Line2 l1=new Line2(p2,p1);
Line2 l2=new Line2(p1,p3);
Line2 l3=new Line2(p2,p3);
lines.add(l1);
lines.add(l2);
lines.add(l3);
this.repaint();
}
public void mouseClicked(MouseEvent me){
}
public void mouseExited(MouseEvent me){
}
public void mouseEntered(MouseEvent me){
}
public void mousePressed(MouseEvent me){
}
public void mouseMoved(MouseEvent me){
}
public static void main(String args[]){
new Ecad();
}
public void paint(Graphics g){
Graphics2D g2=(Graphics2D)g;
super.paintComponents(g2);
//g2.scale(0.5, 0.5);
for(final Line2 r:lines){
r.paint((Graphics2D)g2);
}
}
}
这是行级
import java.awt.*;
public class Line2 {
Point start,end;
public Line2(Point a,Point b){
start=a;
end=b;
}
public void paint(Graphics2D g){
g.drawLine((int)start.getX(),(int)start.getY(),(int)end.getX(),(int)end.getY());
}
}
在ECAD类的paint()方法,如果我使用缩放选项来放大或缩小,鼠标坐标没有得到转化。所以在缩放之后,如果我点击某一点,三角形就会被放置在其他点上。有什么方法来改变鼠标坐标,以及当我缩放图形组件?
不确定你的主要问题,但你的绘图都是错误的。您不应该直接在JFrame的paint(...)方法中绘制,而应该使用JComponent的paintComponent(...)方法(或JComponent的子例如JPanel)。然后你会称之为真正的超级方法。我不知道你为什么要调用'super.paintComponents(...)'。 – 2012-04-10 20:37:56
我没有在我的真实程序中绘制JFrame。我在JPanel中做过。我想关注这个缩放问题,所以在这个例子中跳过了JPanel的创建。当我在正常范围内点击鼠标时,三角形被放置在我想要的位置。但是,如果我将比例设置为0.5,则三角形不会放在我点击的位置。尝试运行程序设置不同的比例因子。你会明白的。 – 2012-04-10 20:42:40
您需要使用一个简单的几何图形来根据比例和固定点(这里是三角形的顶点)为每个三角形形状转换Graphics2D对象。 – 2012-04-10 21:39:23