[英]JScrollPane doesn't work for my JPanel
首先,我必須說我已經檢查了這些問題,但沒有找到我的答案:
還有很多其他問題
我也檢查了這些教程和示例:
和許多其他網站。 但我無法解決我的問題。
這是我的代碼的簡單類型:
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
沒有出現。 我測試過很多東西。 我已經改變了將panel
和scrollPane
添加到我的frame
但它沒有用。 任何人都可以幫助我嗎?
BorderLayout
)的內容窗格將默認將組件置於CENTER
約束中(如果未提供),並且CENTER
區域只能接受單個組件。 setSize
,而是setExtendedState
。 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.