簡體   English   中英

在JPanel中時JScrollPane不起作用

[英]JScrollPane doesn't work while inside a JPanel

當我給它一個JPanel並將JScrollPane直接添加到具有frame.getContentPane.add()JFrame上時, JScrollPane可以完美地工作。 但是,當我將JScrollPane添加到JPanel然后再將JPanel添加到JFrame 時,它不起作用 我需要使用第二種方法,因為我將在JPanelJFrame添加多個內容,並且需要保持其組織良好。 這是我的代碼。

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

public class Main {

    /**
     * @param inpanel asks if the JScrollPane should
     * be inside of a JPanel (so other things can also be added)
     */
    public static void testScroll(boolean inpanel) {
        JFrame f = new JFrame();
        f.setLayout(new BorderLayout());
        f.setResizable(true);
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.red));
        //panel.setLayout(new BoxLayout(panel, 1));
        panel.setLayout(new GridLayout(0,1));
        for (int i = 0; i < 100; i++) {
            JLabel l = new JLabel("hey"+i,SwingConstants.CENTER);
            l.setBorder(BorderFactory.createLineBorder(Color.green));
            l.setPreferredSize(new Dimension(200,200));
            panel.add(l);
        }
        JScrollPane scrollPane = new JScrollPane(panel);
        scrollPane.setBorder(BorderFactory.createLineBorder(Color.blue));

        //**********THIS DOES NOT WORK HOW I WANT IT TO************
        if(inpanel){ 
            JPanel holder = new JPanel();
            holder.add(scrollPane);
            f.getContentPane().add(holder);
        }
        //************THIS DOES WORK HOW I WANT IT TO****************
        else{ 
            f.getContentPane().add(scrollPane);
        }
        f.pack();
        f.setSize(500, 500);
        f.setExtendedState(JFrame.MAXIMIZED_BOTH);

        f.setVisible(true);

        JScrollBar bar = scrollPane.getVerticalScrollBar();
        bar.setValue(bar.getMaximum());
        bar.setUnitIncrement(50);
    }

    public static void main(String[] args) {

        Runnable r = new Runnable() {
            @Override
            public void run() {
                testScroll(false); //OR TRUE
            }
        };
        SwingUtilities.invokeLater(r);

    }

}

在main方法中,如果我傳遞false,則其工作方式與我之前提到的相同,但是當我傳遞true時,它將顯示而沒有滾動條。

傳遞假圖片

在此處輸入圖片說明

傳遞真實時的圖片

在此處輸入圖片說明

我需要一種將JScrollPane添加到JPanel並仍能正常工作的方法。 提前致謝!

您的問題是持有人JPanel的布局。 默認情況下,它是FlowLayout,它在需要時不會調整其子組件的大小。 將其設置為BorderLayout,然后在需要時將調整您的滾動窗格的大小。 如果您需要更復雜的內容,請查看布局管理器教程。

暫無
暫無

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

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