2013-11-15 56 views
0

創建滾動窗格,我有以下類...問題與Swing

public class MessageFrame extends JFrame { 

public MessageFrame(List<HistoryMessage> messages){ 
    setLayout(null); 
    JPanel container = new JPanel(); 
    JScrollPane scrPane = new JScrollPane(container); 
    getContentPane().add(scrPane); 
    int i = 1; 
    for(HistoryMessage m : messages){ 
     //TODO: needs to be StringBuilder 
     StringBuilder sb = new StringBuilder(); 
     sb.append("<html> <strong>"); 
     sb.append(m.getSender()); 
     sb.append(" "); 
     Date d = new Date(m.getDate()); 
     sb.append(d); 
     sb.append(":</strong>"); 
     sb.append(m.getPayload()); 
     sb.append("</html>"); 
     JLabel l = new JLabel(sb.toString()); 
     l.setBounds(30, i, 400, 50); 
     i += 125; 
     container.add(l); 
    } 
    setTitle("Messages"); 
    setSize(500,500); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    setVisible(true); 
} 

} 

這說明我什麼,但是,如果我不使用滾動窗格此工程...

public MessageFrame(List<HistoryMessage> messages){ 
    setLayout(null); 
    int i = 1; 
    for(HistoryMessage m : messages){ 
     //TODO: needs to be StringBuilder 
     StringBuilder sb = new StringBuilder(); 
     sb.append("<html> <strong>"); 
     sb.append(m.getSender()); 
     sb.append(" "); 
     Date d = new Date(m.getDate()); 
     sb.append(d); 
     sb.append(":</strong>"); 
     sb.append(m.getPayload()); 
     sb.append("</html>"); 
     JLabel l = new JLabel(sb.toString()); 
     l.setBounds(30, i, 400, 50); 
     i += 125; 
     add(l); 
    } 
    setTitle("Messages"); 
    setSize(500,500); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    setVisible(true); 
} 

但沒有滾動,所以只有前幾個出現,有人可以幫助我與我失蹤?

回答

2
setLayout(null); 

請勿使用空佈局。

l.setBounds(30, i, 400, 50); 

請勿使用setBounds(...)。

當添加到滾動窗格的組件的首選大小大於滾動窗格的大小時,滾動條將自動出現。

讓佈局經理去工作。請閱讀Layout Managers的Swing教程中的部分,並使用適當的佈局管理器或嵌套佈局管理器的組合。

+0

我會嘗試這樣做我必須手動設置窗格的大小? – Jackie

+0

將scrollpane添加到框架的內容窗格中,以便在繪製框架邊框和標題欄後,將需要框架中剩餘的任何空間。 – camickr

0

這裏是+ camickr的更改後的作品,新版本....

public class MessageFrame extends JFrame { 

public MessageFrame(List<HistoryMessage> messages){ 
    JPanel container = new JPanel(); 
    container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS)); 
    JScrollPane scrPane = new JScrollPane(container); 
    getContentPane().add(scrPane); 
    int i = 1; 
    for(HistoryMessage m : messages){ 
     //TODO: needs to be StringBuilder 
     StringBuilder sb = new StringBuilder(); 
     sb.append("<html> <strong>"); 
     sb.append(m.getSender()); 
     sb.append(" "); 
     Date d = new Date(m.getDate()); 
     sb.append(d); 
     sb.append(":</strong>"); 
     sb.append(m.getPayload()); 
     sb.append("</html>"); 
     JLabel l = new JLabel(sb.toString()); 
     i += 125; 
     container.add(l); 
    } 
    setTitle("Messages"); 
    setSize(500,500); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    setVisible(true); 
} 

}