Моя программа включает в себя рисование треугольников, где я их нажимаю.Преобразование координат мыши в соответствии с масштабным коэффициентом - 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 (в) метод, если я использовать параметр масштаба, чтобы увеличить или уменьшить масштаб, мышь координаты не трансформируются. Поэтому после того, как он будет увеличен, если я нажму на одну точку, треугольник будет помещен в какую-то другую точку. Есть ли способ преобразовать координаты мыши, когда я масштабирую компонент Graphics?
Не уверен в вашей главной проблеме, но ваш рисунок не прав. Вы не должны рисовать непосредственно в методе 'paint (...)' JFrame, а скорее в методе 'paintComponent (...)' JComponent (или дочернем компоненте JComponent, таком как JPanel). Тогда вы бы назвали истинный метод супер. Я не уверен, почему вы вызываете 'super.paintComponents (...)'. –
Я не рисовал JFrame в своей реальной программе. Я сделал это в JPanel. Я хочу сосредоточиться на этой проблеме масштабирования, поэтому пропустил создание JPanel в этом примере. Когда я нажимаю мышь в нормальном масштабе, треугольник попадает туда, куда я хочу. Но если я установил шкалу в 0.5, треугольник не будет помещен туда, где я нажимаю. Попробуйте запустить программу, устанавливая различные масштабные коэффициенты. У тебя будет идея. –
Вам нужно использовать небольшую простую геометрию для перевода объекта Graphics2D для каждой формы треугольника на основе шкалы и фиксированной точки (здесь вершина треугольника). –