не могу получить мои координаты Graphics2D mouseclick java

У меня есть расширенный класс JLabel, в котором я рисую свою карту, используя приведенный ниже код: new AffineTransform() - это идентификатор, оставляющий мое изображение как есть (0,0,w,h)

 mygraphics2D = (Graphics2D) getGraphics();
 graphics2D.scale(2.0,2.0) ;
 graphics2D.rotate(....
 graphics2D.drawImage(myImageIcon.getImage(),new AffineTransform(), this);

теперь, когда я нажимаю на свой JLabel, используя это событие:

public void mouseClicked(MouseEvent e) {
x =e.getX() ;
y = e.getY();
NewX = ????
NewY = ????
}

Я хочу получить свои новые координаты "масштабированные, повернутые... координаты", которые я пробовал

Point2D ptSrc = new Point2D.Double(x, y);
Point2D ptDst = new Point2D.Double(0, 0);
mygraphics2D.getTransform().transform(ptSrc, ptDst);

но ptDst отличается от (масштабированных, повернутых, ..) координат, пожалуйста, помогите!!!


person S3ddi9    schedule 06.08.2012    source источник
comment
Я хочу получить свои новые координаты масштабированные, повернутые... координаты Почему? Какое отношение они имеют к масштабированию/повороту? Какую функцию это должно реализовать?   -  person Andrew Thompson    schedule 06.08.2012
comment
У меня есть карта, которую можно трансформировать (масштабировать, вращать, переводить), и я хочу добавить объекты, щелкнув JLabel, чтобы новый объект располагался в новых координатах.   -  person S3ddi9    schedule 06.08.2012
comment
Я думаю, что Эндрю Томпсон прав. Вам действительно нужно применять трансформацию при нажатии или можно просто позволить процессу рисования позаботиться об этом за вас?   -  person MadProgrammer    schedule 06.08.2012
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE. Даже фрагменты кода не очень информативны. У меня есть карта, которую можно трансформировать (масштабировать, вращать, переводить) Поскольку изображение никак не трансформируется, мне интересно... Какая часть карты является трансформировался?   -  person Andrew Thompson    schedule 06.08.2012
comment
моя карта myImageIcon.getImage(), когда я масштабирую, например, координаты меняются, конечно, когда я нажимаю на определенную область изображения, я хочу добавить туда свой объект   -  person S3ddi9    schedule 06.08.2012
comment
а) Это было ясно как грязь. б) Теперь, когда два человека оставили комментарии, вам нужно добавить к комментарию префикс @MadProgrammer (или другое имя), чтобы убедиться, что человек уведомлен о комментарии.   -  person Andrew Thompson    schedule 06.08.2012
comment
@SéddikLaraba Вы уверены ptDst, что не содержит масштабируемую/повернутую точку? final Point transformed = graphics.getTransform().transform(e.getPoint(), null);   -  person obataku    schedule 06.08.2012
comment
может быть, мне следует использовать инвертированное преобразование @veer   -  person S3ddi9    schedule 06.08.2012
comment
@SéddikLaraba да, извини, я идиот. Я не совсем понял, о чем вы просили :p   -  person obataku    schedule 06.08.2012


Ответы (3)


Похоже, вам нужно как прямое, так и обратное преобразование для перевода между двумя системами координат. В этом примере уравнения масштабирования являются явными; в этом альтернативном подходе используется второй AffineTransform.

person trashgod    schedule 06.08.2012
comment
это именно то, что я хотел, получить координаты мыши из масштабированной JPanel, я не понимаю, почему никто этого не понял, даже если это написано ???, спасибо @trashgod - person S3ddi9; 06.08.2012
comment
Пожалуйста. Спасибо комментаторам за разъяснения и @finw за рабочий пример; многие ссылки просто предполагают, что это возможно. - person trashgod; 06.08.2012

Я нашел это:

Не знаю, помогут они или нет.

person MadProgrammer    schedule 06.08.2012

Это не так сложно ;-)

  1. Когда вы перерисовываете компонент, сохраните AffineTransform после преобразования с помощью g2.getTransform()

  2. Затем вызовите на нем функцию invert()

  3. В событии mouseClicked() используется следующий код:

    Point2D p= trans.transform(new Point2D.Double(evt.getX(), evt.getY()), null);
    System.out.println("click x="+p.getX()+" y="+p.getY());
    

Вот и все!

person pknoe3lh    schedule 22.09.2013