2016-06-21 108 views
0

我无法找到故障原因将不会显示的内容:滚动面板不显示内容

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

什么是'Main' ?我们没有代码 – Frakcool

+0

它包含所有主要的东西,包括字体和列表... banlist实际上只是列表,其他格式。该代码不是非常有用,并且不应该影响这个问题。 – Twijn

+2

请发布[mcve]我们可以复制粘贴并查看您的问题,这样我们就不必尝试修复它,然后尝试重现您的问题。 – Frakcool

回答

1

内容被加入,但是没有被显示,因为你是如何设计你的布局,作为代表您的禁令面板没有高度:

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

通过下面的评论@FredK's suggestions ,您可以通过在布局中的行之间应用垂直间隔来保持whitespace面板的效果。这是通过提供另一个构造提供内GridLayoutGridLayout(int rows, int cols, int hgap, int vgap)

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


通过嘲讽了一些禁令,我买了你的代码如下:

bans

注意:通过应用这些建议(使用5的vgap),输出结果与上面的相同


便笺:如果您发现某些工作正在进行中,它往往来自您所做的更改。如果您使用IntelliJ作为您的IDE,则有一个有用的功能,称为 本地历史记录。通过右键单击课程,您可以逐行比较您对班级带有时间戳的更改,类似于源代码管理。你可以在这里阅读更多: Using Local History

我不是说你必须改变你的IDE,但作为一个初学者,如果你做了很多的实验,你可能会发现一些利益在里面