我无法找出为什么这不会显示内容:
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服务器上的正确号码,因此应该可以正常工作。
答案 0 :(得分:1)
正在添加内容,但由于您设计布局的方式,因此无法显示内容,因为代表您的禁令的面板没有高度:
panel.setPreferredSize(new Dimension(510,0));
通过在评论中关注@FredK's suggestions,您可以通过在布局中的行之间应用垂直间隙来保持whitespace
面板的效果。这是由GridLayout
中提供的另一个构造函数提供的:GridLayout(int rows, int cols, int hgap, int vgap)
这里有一些演示:How to Use GridLayout
通过模拟一些禁令,我得到了以下代码:
注意:通过应用建议(vgap为5),输出与上面相同
<小时/> 旁注:如果您发现某些内容早些时候工作,则往往是您所做的更改。如果您使用IntelliJ作为IDE,则有一个有用的功能,称为本地历史记录。通过右键单击该类,您可以看到对带有时间戳的类所做的更改的逐行比较,类似于源代码控制。您可以在此处阅读更多内容:Using Local History
我并不是说你必须改变你的IDE,但作为一个初学者,如果你做了很多实验,你可能会发现它有一些好处