添加JPanel时,JScrollPane不显示滚动条

时间:2014-07-08 18:27:16

标签: java swing jpanel jscrollpane preferredsize

我尝试使用以下命令将JPanel添加到JScrollPane:

    panel1 Panel1 = new panel1(); 
    jScrollPane1.setViewportView(Panel1);

它有效。但问题是scrollPane不显示滚动条甚至Panel1更大。 (我正在使用NetBeans& panel1是一个jpanel表单)

2 个答案:

答案 0 :(得分:5)

覆盖JScrollPane上述JComponent的方法,您可能会看到滚动条。或者可以简单地调用getPreferredSize(),尽管如API中所述

设置此组件的首选大小。如果preferredSize为null,则将要求UI提供首选大小

覆盖将是有益的,因为它倾向于为所述JScrollPane scroller = new JScrollPane() { @Override public Dimension getPreferredSize() { return new Dimension(300, 200); } }; scroller.setViewportView(panelWithScroll); 定义一些适当的维度。

这样的事情:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PanelScroller {

    private void displayGUI() {
        JFrame frame = new JFrame("Swing Worker Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel contentPane = new JPanel();
        JPanel panelWithScroll = new JPanel();
        panelWithScroll.setLayout(new GridLayout(0, 1, 5, 5));
        JScrollPane scroller = new JScrollPane() {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(300, 200);
            }
        };
        scroller.setViewportView(panelWithScroll);
        //scroller.setPreferredSize(new Dimension(300, 200));

        for (int i = 0; i < 20; i++) {
            panelWithScroll.add(new JLabel(Integer.toString(i + 1), JLabel.CENTER));
        }

        contentPane.add(scroller);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                new PanelScroller().displayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}

一个例子:

{{1}}

答案 1 :(得分:0)

如果只希望显示滚动条,可以致电

JScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
JScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

但这根本不能使它们正常工作。

如果您不想让它们正常工作,则可以尝试将Scrollpane中组件的首选大小设置为大于Scrollpane的大小,然后调用repaint(例如,通过全屏显示窗口)