Запутались в координатах событий, сообщенных и рассчитанных из JScrollPane.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Запутались в координатах событий, сообщенных и рассчитанных из JScrollPane.

Сообщение Anonymous »

В следующем примере кода мы создаем JFrame, JPanel и JScrollPane для просмотра JPanel, все они помещаются в JFrame:

Код: Выделить всё

import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class MouseEventExample
{
public static void main(String\[\] args)
{
new MouseEventExample().go();
}

public void go()
{
JFrame jFrame = new JFrame("MouseEventExample");
JPanel jPanel = new JPanel();
jPanel.setSize(1000,1000);
jPanel.setPreferredSize(new Dimension(1000,1000));

JScrollPane jScrollPane = new JScrollPane(jPanel);
jScrollPane.getVerticalScrollBar().setUnitIncrement(20);
jScrollPane.getHorizontalScrollBar().setUnitIncrement(20);

MouseWheelListener\[\] defaultListeners = jScrollPane.getMouseWheelListeners();
for (MouseWheelListener oneListener:defaultListeners) { jScrollPane.removeMouseWheelListener(oneListener); }
jScrollPane.addMouseWheelListener
(
new MouseAdapter()
{
@Override
public void mouseWheelMoved(MouseWheelEvent mouseWheelEvent)
{
Point eventPoint = mouseWheelEvent.getPoint();
System.out.printf("Event point x,y %d,%d%n", eventPoint.x, eventPoint.y);

Point viewPoint = jScrollPane.getViewport().toViewCoordinates(eventPoint);
System.out.printf(" View point x,y %d,%d%n", viewPoint.x, viewPoint.y);
}
}
);

jFrame.add(jScrollPane);
jFrame.setSize(300,300);
jFrame.setPreferredSize(new Dimension(300,300));

jFrame.pack();
jScrollPane.getViewport().setViewPosition(new Point(300,300));

jFrame.setVisible(true);
}
}
Когда появляется JFrame, и я помещаю на него указатель мыши, чтобы переместить колесо мыши, тем самым вызывая операторы printf, мы обнаруживаем, что точка, возвращаемая MouseWheelEvent.getPoint(), совпадает с точкой, рассчитанной JViewport.toViewCoordinates(); обе являются позицией точки в JScrollPane, в отличие от JPanel.
Я ожидал, что MouseWheelEvent.getPoint() сообщит о позиции в JScrollPane, поскольку прослушиватель добавлен в JScrollPane, но я ожидал, что JScrollPane.toViewCoordinates преобразует эту точку в координаты базовой JPanel, и вместо этого он возвращает переданные ему координаты без изменений. (Начало просмотра установлено на 300,300, а положение полос прокрутки указывает, что позиция просмотра не равна 0,0.)
В документации для toViewCoordinates() говорится:

Преобразует точку в пиксельных координатах в координаты просмотра. Подклассы области просмотра, поддерживающие «логические координаты», переопределяют этот метод.

Он не определяет координаты пикселей, но в документации к getViewPosition() говорится, что это координаты «представления», которому порт просмотра дает ограниченное изображение.
Поэтому я ожидал, что функция ViewPosition() вернет координаты изображение, часть которого отображается в окне просмотра. Что я в этом не понимаю?

Подробнее здесь: https://stackoverflow.com/questions/798 ... scrollpane
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»