我有一个带有JLabel的JPanel,添加到JScrollPane中。我有一个actionListener,它调用JLabel.setIcon("file.jpg");
。图像正确显示在JScrollPane中,并且为完整尺寸。滚动条完美显示。我试图将垂直和水平滚动条默认设置在中心位置,因此默认情况下您正在查看图像的中心。
是否有一个JScrollPane方法将视口(viewport)定位在图像的中心?还是可以手动将每个滚动条的位置设置为最大尺寸除以2?
我试过了
JScrollPane.getVerticalScrollBar().setValue(JScrollPane.getVerticalScrollBar().getMaximum() / 2);
编译时不会使滚动条居中。我也尝试将JPanel的布局管理器设置为GridBagLayout,但这也不起作用。
最佳答案
基本上,您需要知道视口(viewport)的可视区域的大小。
Rectangle bounds = scrollPane.getViewport().getViewRect();
然后,您需要组件的大小,但是一旦将其添加到滚动 Pane 中,就可以从视口(viewport)中获取它了。
Dimension size = scrollPane.getViewport().getViewSize();
现在您需要计算中心位置...
int x = (size.width - bounds.width) / 2;
int y = (size.height - bounds.height) / 2;
然后您只需调整视口(viewport)位置...
scrollPane.getViewport().setViewPosition(new Point(x, y));
现在,请记住,只有在屏幕上实现了滚动 Pane (或者至少已将其放置在其父容器中)后,这才起作用