У меня есть JPanel внутри JScrollPane. У JPanel есть MouseListener, присоединенный, чтобы реагировать на события мыши. Когда я добавляю JPanel непосредственно в родительский JComponent (без промежуточной JScrollPane), все работает правильно. После добавления JScrollPane к миксу координаты мыши, отправленные обработчикам событий на JPanel, имеют положительное смещение вдоль осей x и y.
Пример (слушатель мыши на JPanel):
public void mousePressed(MouseEvent ev) {
System.out.println(ev.getPoint());
System.out.println(this.getMousePosition());
}
Когда я нажимаю на верхний левый угол JPanel вместо (0,0), я получаю что-то вроде (5,60) от обеих функций, тогда как нижний правый угол (для размера JPanel 600x400) возвращает (605,460). Любая идея, откуда происходит это линейное смещение?
Редактировать: Неважно, я сократил его до простого теста, и он работает, как и ожидалось. Так что это должно быть что-то в моем окружающем коде, что вызывает такое поведение.
public class JScrollPaneTest {
public static void main(String[] args) {
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().setLayout(new BorderLayout());
MyPanel panel = new MyPanel();
window.getContentPane().add(new JScrollPane(panel), BorderLayout.CENTER);
window.setSize(new Dimension(600, 400));
window.setVisible(true);
}
}
public class MyPanel extends JPanel implements MouseListener, Scrollable {
public MyPanel() {
setLayout(null);
addMouseListener(this);
this.setAutoscrolls(true);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(2000, 2000);
}
@Override
public void mousePressed(MouseEvent ev) {
System.out.println("Event mouse position: " + ev.getPoint());
System.out.println("Panel mouse position: " + this.getMousePosition());
}
}