可滚动的JPanel

时间:2009-09-06 13:55:22

标签: java swing scroll jpanel

如何使JPanel可滚动?我在使用

将其添加到包含面板时实现了可滚动界面
tabbedPane.add("Editor", new JScrollPane(storeyEditor = new MNScrollablePanel()));

没有效果

代码:

public class MNScrollablePanel extends JPanel implements Scrollable {

    public Dimension getPreferredScrollableViewportSize() {
        return getPreferredSize();
    }

    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 10;
    }

    public boolean getScrollableTracksViewportHeight() {
        return false;
    }

    public boolean getScrollableTracksViewportWidth() {
        return false;
    }

    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
        return 10;
    }
}

5 个答案:

答案 0 :(得分:22)

这就像我一样......

JPanel test = new JPanel();
test.setPreferredSize(new Dimension( 2000,2000));
JScrollPane scrollFrame = new JScrollPane(test);
test.setAutoscrolls(true);
scrollFrame.setPreferredSize(new Dimension( 800,300));
this.add(scrollFrame);

答案 1 :(得分:8)

您必须使用JScrollPane。然后拨打setViewportview(Component);

您不必实现可滚动,JPanel已经可以滚动

答案 2 :(得分:1)

正如所有其他帖子中所提到的,没有理由自己实现Scrollable接口。但是,如果您只是玩游戏,那么发布的基本代码看起来很合理。但是,您没有发布演示程序,显示您如何使用此代码。将来,在您的问题上发布SSCCE。如果您不知道SSCCE是什么,那么搜索网页。

一旦可能出现问题,当添加到滚动窗格的视口的组件的“首选大小”大于滚动窗格的大小时,滚动条会自动出现。

因此,如果您在面板上进行自定义绘画,则您有责任在面板更改时设置首选大小。如果您使用的是带有组件和布局管理器的面板,那么您不必担心这一点。但是,如果您使用带有null布局管理器的组件,那么您也会遇到问题。

这就是我们需要SSCCE的原因,因为我们不知道您如何使用该面板的背景。

答案 3 :(得分:1)

JPanel没有实现Scrollable。最好使用SwingX中的JXPanel,它实现了Scrollable并具有更多功能。

答案 4 :(得分:0)

我有一个新的解决方案。

我认为你必须使用这段代码:

storyEditor = new JPanel();
storyEditor.setPreferredSize(new Dimension(..., ...)); // Insert Here your size for the editor
JScrollPane scroller = new JScrollPane(storyEditor);
tabbedPane.add("Editor", scroller));
frame.setSize(frame.getWidth()+1, frame.getHeight()); // frame is the JFrame where the tabbed pane is into
// Maybe you can replace "frame" with "this"
// You need to resize your frame. Why, I don't know...
frame.pack();
// Your original size will be restored by calling pack

这对我来说是一个解决方案。我希望你能来!