JScrollPane中的JPanel:垂直条没有出现

时间:2014-07-10 10:24:13

标签: java swing jpanel jscrollpane

我的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();
    }

}

请帮我显示垂直ScrollBar ..

2 个答案:

答案 0 :(得分:2)

在Swing中,您可以通过多种方式进行组件布局:手动完成所有操作或使用LayoutManager。

调用setSize()仅适用于您未在容器内使用LayoutManager的情况。该面板基本上调整到其容器(您的窗口)的大小,并且没有您想要的大小,因为它不是管理组件大小的setSize()方法,而是您的BorderLayout管理器。

但是,如果您在面板上填充的内容大于屏幕尺寸,则会出现滚动条。

您可以覆盖组件的getPreferredSize(),以便返回所需的尺寸,如herehere所示。

如果您希望显示滚动条,即使组件不大于JScrollPane,也可以设置它:“

pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

答案 1 :(得分:0)

你可以用它 innerPanel.setPreferredSize(new Dimension(d1.width,2*(d1.height/3)));查看垂直滚动条。