首先,我必须说我已经检查了这些问题并且没有找到我的答案:
和许多其他问题一样
我也检查了这些教程和示例:
和许多其他网站。但我无法解决我的问题。
和 这是我的简单代码:
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
的方式,但它没有用。任何人都可以帮助我吗?
答案 0 :(得分:14)
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);
}
}
答案 1 :(得分:5)
您在上下文窗格中添加了一个不必要的重复面板。而不是:
getContentPane().add(scrollPane);
getContentPane().add(panel);
仅使用
getContentPane().add(scrollPane);
因为scrool窗格是面板的容器所以有意义,因此在上下文窗格中添加容器就足够了。