我的思路是通过滚动条实现,设置一个超大的JPanel,然后放到一个比屏幕小的JScrollPanel中,这样显示区域确实大了,但是超出范围的坐标get不到,我在mousePress事件中用e.getX()和e.getY() 输出鼠标的位置,但是滚动条在初始位置的时候,我单击最左上角,输出了(0,0),但是滚动条滚动后,再次单击左上角,仍然输出(0,0),我应该怎么写才能把点的位置改成相对于里面那个超大JPanel的位置,而不总是外层的相对位置

解决方案 »

  1.   

    应该给那个超大panel加鼠标事件 或者加入滚动条的偏移量
    myJScrollPane.getHorizontalScrollBar().getValue()
    myJScrollPane.getVerticalScrollBar().getValue()
      

  2.   

    不是很明白~ 添加什么事件呢, 还有如果是添加偏移量的话怎么把这个get到的value值怎么利用呢~是要移动原点吗
      

  3.   

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;public class GettingMousePosition {
    public static void main(final String[] args) {
    EventQueue.invokeLater(() -> {
    final JFrame frame = new JFrame("Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setPreferredSize(new Dimension(800, 600)); final JPanel main = new JPanel();
    main.setPreferredSize(new Dimension(3000, 2000));
    final JLabel status = new JLabel("Mouse Position:"); frame.add(new JScrollPane(main), BorderLayout.CENTER);
    frame.add(status, BorderLayout.PAGE_END); main.addMouseMotionListener(new MouseMotionAdapter() { @Override
    public void mouseMoved(final MouseEvent e) {
    status.setText("Mouse Position : " + e.getPoint());
    } }); frame.pack();
    frame.setLocationByPlatform(true);
    frame.setVisible(true);
    });
    }
    }
      

  4.   

    看来是我监听的事件不对吗,之前我用一个class  extendsJpanel,implements  mouseListener,在mousePressed里打印e.getX 和el.getY,没有成功,改成你这个addMouseMotionListener(new MouseMotionAdapter() 就可以了,不知道能不能实现接下来的通过指定坐标位置画点,多谢!