如何使一个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;
}
}
你必须使用一个JScrollPane
。 然后调用setViewportview(Component)
;
你不必实行滚动,JPanel的是媒体链接滚动
它曾与我这个样子....
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);
正如所有其他张贴提到没有理由实行滚动界面自己。 但是,如果你只是玩弄,然后贴在基本代码看起来合理。 但是你没有张贴您展示如何使用这个代码的演示程序。 在未来,用后您的问题SSCCE。 如果你不知道什么是SSCCE随后在网络上搜索。
一旦可能的问题是滚动条自动出现时加入到滚动窗格的视口中的成分的“优选的大小”比滚动窗格的尺寸越大。
所以,如果你在面板上做的风俗画,你是负责设置面板的首选大小,因为它的变化。 如果您使用的组件面板和布局管理器,那么你就不必担心这个问题。 但是,如果你正在使用的组件用空布局管理器,你也会有问题。
这就是为什么我们需要一个SSCCE,因为我们不知道你是如何使用该面板的背景。
JPanel中不实现滚动。 这是更好地使用JXPanel从SwingX ,它实现了滚动,有更多的功能。
我对你有一个新的解决方案。
我认为你必须使用此代码:
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
这对我是一个解决方案。 我希望你来!