2016-06-21 109 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,但作爲一個初學者,如果你做了很多的實驗,你可能會發現一些利益在裏面