我有一个带有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 (或者至少已将其放置在其父容器中)后,这才起作用

10-04 23:31
查看更多