java - 在 JScrollPane 中滚动 JComponent

标签 java swing jscrollpane jviewport

比如说,我有一个很大的 JComponent:

Dimension componentSize = new Dimension(5000,5000);

还有一个更小的 JScrollPane:

Dimension scrollPaneSize = new Dimension(500,500);

我想在 JScrollPane 中显示我的 JComponent 的一部分,如下图所示:

JComponent inside JScrollPane

白色矩形是我的 JScrollPane,它当前显示从 (x1,y1)(x2,y2) 的部分 JComponent。


那么,我尝试了什么:

我创建了一个新的 JComponent:

JComponent component = new JComponent(){
    protected void paintComponent(Graphics g)
    {
        // Here I draw a background
    } 
};

并将其作为视口(viewport) View 放置在 JScrollPane 中:

JScrollPane scrollPane = new JScrollPane();

scrollPane.setViewportView(component);

然后我将 JScrollPane 附加到 JFrame:

JFrame frame = new JFrame();

frame.setLayout(new BorderLayout());

frame.add(scrollPane, BorderLayout.CENTER);

frame.pack();
frame.setVisible(true);

我尝试通过以下方式更改可见区域:

scrollpane.getViewport().setBounds(x1,y1,500,500)

怎么了?

最佳答案

setBounds 用于确定组件在其父容器中的位置和大小。这不是你想要做的。除非您使用的是绝对布局,否则切勿使用此方法。

相反,尝试

component.scrollRectToVisible(new Rectangle(x1, y1, 500, 500));

相反...

查看 JComponent#scrollRectToVisible

关于java - 在 JScrollPane 中滚动 JComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399315/

相关文章:

java - 关注 "alt"按键上的第一个 jmenubar 项目

java - 如何向 JScrollPane 视口(viewport)添加渐变?

java - 如何在 JScrollPane 中启用滚动?

java - 使Java JScrollpane仅垂直滚动

java - 如何为 maven-changes-plugin 配置超时?

Java 长轮询 : Separate Thread?

java - 如何在 JText 组件中的不同插入符位置插入多个工具提示?

java - java中的ImageIcon

java - Spring 内置了哪些属性类型转换器?

java - AADAuthenticationFilter 仅调用一次