簡體   English   中英

添加JPanel時,JScrollPane不顯示滾動條

[英]JScrollPane doesn't show scroll bars when JPanel is added

我試圖使用以下方法將JPanel添加到JScrollPane:

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

而且有效。 但是問題在於,即使Panel1較大,scrollPane也不顯示滾動條。 (我正在使用NetBeans,panel1是jpanel形式)

覆蓋上述JScrollPane getPreferredSize()方法,您可能可以看到滾動條。 或者可以只調用setPreferredSize() ,盡管如API中所述

設置此組件的首選大小。 如果preferredSize為null,則將要求UI提供首選大小

覆蓋將是有益的,因為它傾向於為所述JComponent定義一些適當的尺寸。

像這樣:

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);
    }
}

如果您只想顯示滾動條,可以致電

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

但這根本不能使它們正常工作。

如果您不想讓它們正常工作,則可以嘗試將Scrollpane內組件的首選大小設置為更大,然后再選擇Scrollpane的大小,然后調用repaint(例如,通過全屏顯示窗口)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM