簡體   English   中英

JScrollPane不適用於我的JPanel

[英]JScrollPane doesn't work for my JPanel

首先,我必須說我已經檢查了這些問題,但沒有找到我的答案:

1234567

還有很多其他問題

我也檢查了這些教程和示例:

191011

和許多其他網站。 但我無法解決我的問題。

這是我的代碼的簡單類型:

public class Question extends JFrame {
public Question() {
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    setLayout(new BorderLayout());
    setSize(d.width, d.height);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    JPanel panel = new JPanel();
    panel.setPreferredSize(new Dimension(d.width, d.height));
    panel.setBorder(BorderFactory.createLineBorder(Color.red));
    panel.setLayout(new BoxLayout(panel, 1));
    for (int i = 0; i < 100; i++) {
        panel.add(new JButton("kjdh"));
    }
    JScrollPane scrollPane = new JScrollPane(panel);
    scrollPane.setPreferredSize(new Dimension(500, 500));
    getContentPane().add(scrollPane);
    getContentPane().add(panel);
    setVisible(true);

}

public static void main(String[] args) {
    new Question();
} 
}

JScrollPane沒有出現。 我測試過很多東西。 我已經改變了將panelscrollPane添加到我的frame但它沒有用。 任何人都可以幫助我嗎?

  1. 不要在面板上設置首選大小。 請參閱我應該避免在Java Swing中使用setPreferred / Maximum / MinimumSize方法嗎? 原因為何。
  2. 將滾動窗格添加到內容窗格。
    1. 使用默認布局( BorderLayout )的內容窗格將默認將組件置於CENTER約束中(如果未提供),並且CENTER區域只能接受單個組件。
    2. 除此之外,該面板已添加到滾動窗格中,它已經顯示在其中,並且只能出現在單個容器中。
  3. 不要擴展框架,只使用一個實例。
  4. 不要setSize ,而是setExtendedState
  5. 應在EDT上構建和更新GUI。
  6. 更好的關閉操作是DISPOSE_ON_CLOSE

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

public class Question {

    public Question() {
        JFrame f = new JFrame();
        f.setLayout(new BorderLayout());
        f.setResizable(false);
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.red));
        panel.setLayout(new BoxLayout(panel, 1));
        for (int i = 0; i < 100; i++) {
            panel.add(new JButton("kjdh"));
        }
        JScrollPane scrollPane = new JScrollPane(panel);
        f.getContentPane().add(scrollPane);
        f.pack();
        f.setExtendedState(JFrame.MAXIMIZED_BOTH);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                new Question();
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

您在上下文窗格中添加了一個不必要的重復面板。 代替:

getContentPane().add(scrollPane);
getContentPane().add(panel);

僅限使用

getContentPane().add(scrollPane);

這是有道理的,因為scrool窗格是面板的容器,因此在上下文窗格中添加容器就足夠了。

暫無
暫無

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

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