gpt4 book ai didi

java - JScrollPane 不适用于我的 JPanel

转载 作者:搜寻专家 更新时间:2023-11-01 01:03:03 25 4
gpt4 key购买 nike

首先我必须说我已经检查了这些问题但没有找到我的答案:

1 , 2 , 3 , 4 , 5 , 6 , 7

还有很多类似的问题

我还检查了这些教程和示例:

1 , 9 , 10 , 11

和许多其他网站。但我无法解决我的问题。

和这是我的代码的简单类型:

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. 不要在面板上设置首选尺寸。参见Should I avoid the use of setPreferred/Maximum/MinimumSize methods in Java Swing?原因。
  2. 将滚动 Pane 添加到内容 Pane 。
    1. 如果未提供任何内容,则使用默认布局 (BorderLayout) 的内容 Pane 将默认将组件置于 CENTER 约束中,并且 CENTER区只能接受单个组件。
    2. 除此之外,面板已经添加到滚动 Pane 中,它已经出现在其中,并且只能出现在单个容器中。
  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);
}
}

关于java - JScrollPane 不适用于我的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18431666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com