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