JScrollPane不在JPanel中工作

时间:2017-06-09 05:50:30

标签: java swing jpanel jscrollpane

我必须在我的项目中使用JScrollPane,但它无效。

enter image description here

我在我的主要JPanel中使用JSCrollPane粘贴了我的代码。

frame = new JFrame();
        frame.setBounds(100, 100, 1179, 733);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JScrollPane scrollPane_1 = new JScrollPane();
        scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane_1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane_1.setBounds(0, 0, 1163, 694);
        frame.getContentPane().add(scrollPane_1);

        JPanel panel = new JPanel();
        scrollPane_1.setViewportView(panel);
        panel.setLayout(null);

2 个答案:

答案 0 :(得分:2)

将布局设置为Null意味着您需要手动处理展示位置 - >指定像素位置并处理容器的大小。

布局管理器会为您处理此展示位置。经理根据其内容计算其首选大小。 ScrollPane使用布局管理器中的计算大小。

这意味着您应该使用布局管理器,将组件放在其中。其余的应该自动工作。

 public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setSize(500, 500);

    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(30, 15));
    for (int row = 0; row < 30; row++) {
        for (int col = 0; col < 15; col++) {
            panel.add(new Button("Button" + row + "/" + col));
        }
    }

    frame.getContentPane().add(new JScrollPane(panel));
    frame.setVisible(true);
}

答案 1 :(得分:0)

我不确定您使用的是哪种布局,但您需要将面板布局设置为类似

panel.setLayout(new FormLayout(
                        "default:grow",
                        "fill:default:grow"));