我的JFrame有一个中央面板,它比屏幕尺寸有更多的宽度和高度,我希望这个中央面板显示在JScrollPane中,现在的问题是垂直滚动条没有出现。JScrollPane只显示其水平位置而不是垂直。以下是我的JFrame的代码。
import java.awt.*;
import javax.swing.*;
public class TestScroll extends JFrame {
public TestScroll() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.setSize(screenSize.width,screenSize.height);
getContentPane().setLayout(new BorderLayout());
JPanel centerPanel=new JPanel(new BorderLayout());
centerPanel.setSize(screenSize.width+50,screenSize.height+50);//I want centralPanel to be of more width and height so to test JScollPane
JPanel northPanel = new JPanel();
Dimension d1=centerPanel.getSize();
northPanel.setPreferredSize(new Dimension(d1.width,d1.height/3));
northPanel.setBackground(Color.BLACK);
centerPanel.add(northPanel, BorderLayout.NORTH);
JPanel innerPanel = new JPanel();
//Dimension d1=centerPanel.getSize();
//panel2.setPreferredSize(new Dimension(d1.width,d1.height/2));
innerPanel.setBackground(Color.ORANGE);
centerPanel.add(innerPanel, BorderLayout.CENTER);
JScrollPane pane=new JScrollPane(centerPanel);
pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
getContentPane().add(pane, BorderLayout.CENTER);
this.setVisible(true);
}
public static void main(String[] args) {
new TestScroll();
}
}
请帮我显示垂直滚动条…
在Swing中,您有几种组件布局方法:手动执行所有操作或使用LayoutManager。
调用setSize()
仅在容器内不使用LayoutManager
时才有效。面板基本上会根据其容器(您的窗口)的大小进行调整,并且没有您想要的大小,因为它不是管理组件大小的setSize()
方法,而是您的BorderLayout管理器。
但是,如果您用大于屏幕尺寸的内容填充面板,则会出现滚动条。
您可以覆盖组件的getPreferredSize()
,以便它返回所需的维度,如此处和此处所示。
如果您希望在组件不大于JScrollPane时显示滚动条,您可以将其设置为如下:
pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
您可以使用此innerPanel. setPreferredSize(new Dimension(d1.wide,2*(d1.高/3));
查看垂直滚动条。