java - 滚动 Pane 不显示内容

标签 java swing jscrollpane

我不明白为什么这不会显示内容:

public class Bans implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
    draw();
}

public static JFrame frame;

public static void draw() {
    frame = new JFrame("Ban History");
    frame.setPreferredSize(new Dimension(575,250));

    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    JLabel label = new JLabel("Ban History");
    label.setFont(Main.header);
    label.setHorizontalAlignment(SwingConstants.CENTER);


    JPanel container = new JPanel();
    JPanel border = new JPanel();
    JScrollPane scrPane = new JScrollPane(border);
    border.add(container);

    container.setLayout(new GridLayout(0,1));
    scrPane.setBorder(null);

    for(Ban ban : Main.banlist) {
        System.out.println(ban.id);
        JPanel whitespace = new JPanel();
        JPanel panel = new JPanel();
        panel.setBackground(Color.getHSBColor(176F, 25.46F, 65.12F));
        panel.setPreferredSize(new Dimension(510,0));
        panel.setLayout(new GridLayout(0,2));


        JLabel banDate = new JLabel();
        banDate.setText("(#" + ban.id + ")  Ban Date:  " + ban.banDate.toString() + "        ");
        banDate.setFont(Main.body);
        panel.add(banDate);

        JLabel banName = new JLabel();
        banName.setText("Banned By:  " + ban.bannedByName);
        banName.setFont(Main.body);
        panel.add(banName);

        JLabel banReason = new JLabel();
        banReason.setText("Reason: " + ban.banReason);
        banReason.setFont(Main.body);
        panel.add(banReason);

        JLabel banTime = new JLabel();
        banTime.setText("Ban Time: " + ban.banTime);
        banTime.setFont(Main.body);
        banTime.setHorizontalAlignment(SwingConstants.RIGHT);
        panel.add(banTime);

        container.add(whitespace);
        whitespace.add(panel);
    }


    frame.add(label,BorderLayout.PAGE_START);
    frame.add(scrPane, BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
}

}

它早些时候可以工作,但是现在 ScrollPane 的任何内容都没有显示。我对 Swing 还很陌生,但我认为这应该可行。是的,表中有内容。运行时,它会打印出 5 个 id 数字,这些数字对应于 MySQL 服务器上的正确数字,因此应该可以正常工作。

最佳答案

内容正在添加,但由于您设计布局的方式而未显示,因为代表您的禁令的面板没有高度:

panel.setPreferredSize(new Dimension(510,0));

关注@FredK's suggestions在注释中,您可以通过在布局中的行之间应用垂直间隙来保持 whitespace 面板的效果。这是由 GridLayout 中可用的另一个构造函数提供的。 : GridLayout(int rows, int cols, int hgap, int vgap)

这里有一些演示:How to Use GridLayout

<小时/>

通过模拟一些禁令,我通过您的代码得到了以下内容:

bans

注意:通过应用建议(vgap 为 5),输出与上面相同

<小时/> 旁注:如果您发现某些内容之前可以正常工作,则可能是您所做的更改所致。如果您使用 IntelliJ 作为 IDE,则有一个有用的功能,称为本地历史记录。通过右键单击类,您可以看到对类所做的更改与时间戳的逐行比较,类似于源代码管理。您可以在这里阅读更多信息:Using Local History

我并不是说您必须更改 IDE,但作为初学者,如果您进行大量实验,您可能会发现其中的一些好处

关于java - 滚动 Pane 不显示内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37950260/

相关文章:

java - CardLayout 与手动添加/删除 JPanel 有什么特别之处?

java - Q关于Java WindowListener

Java Swing : Error when dynamically adding JScrollpane to JPanel

java - 按名称的对象和方法

java - 找不到符号符号: class NestableRuntimeException location: package org. hibernate.exception

java - 如何更改 fragment 文本?

java - 不属于公共(public) API 的类

java - JFreechart 程序运行,但窗口不显示

java - 为什么我的滚动 Pane 没有滚动条?

java - 为什么我的 Java Swing JScrollPane 不断滚动到顶部?