Я работаю над пользовательским интерфейсом Touch в Swing. Хотя я знаю, что это не оптимально, у меня короткий срок, и у меня нет времени на сенсорные экраны с графическим интерфейсом (если они есть).
Я хочу, чтобы мои пользователи могли "проводить" пальцем по экрану, и просмотр специальной панели JScrollPane, которую я сделал, перемещается вместе с ней.
Код очень прост -
public class PanScrollPane extends JScrollPane implements MouseMotionListener{
public PanScrollPane() {
super();
this.addMouseMotionListener(this);
}
@Override
public void mouseDragged(MouseEvent arg0) {
System.out.println("Mouse Dragged!");
}
@Override
public void mouseMoved(MouseEvent arg0) {
System.out.println("Mouse Moved!");
}
Проблема, с которой я столкнулся, заключается в том, что JScrollPane - это контейнер для всех видов JComponents. Когда я впервые начал работать над этим, я подумал, что MouseMovedEvent и MouseDraggedEvent будут распространяться вверх по «дереву GUI», пока они не встретят Компонент со слушателем специально для этого события. Теперь кажется, что любой компонент, который я добавляю в panScrollPane, блокирует любое из этих событий MouseMotion, и я не могу панорамировать.
panScrollPane.add(new JButton("This thing blocks any mouse motion events"));
Я полагал, что распространение MouseEvent вручную (добавление слушателей к каждому отдельному компоненту и последующая отправка события их родителю) будет работать. Это, однако, очень трудоемкое мероприятие, и, поскольку я предпочел бы посвятить свое время работе над другими вещами, мне было интересно, знает ли кто-нибудь из вас какое-либо решение этой проблемы.
Спасибо за чтение, и, надеюсь, спасибо за ответ! :)
изменить: чтобы мои намерения прояснились. Я только хочу, чтобы события mousemotion перехватывались панпанелью, любое другое событие (например, MouseClick, MouseRelease) должно обрабатываться нормально