2015-07-02 96 views
2

我有一個JPanel滾動條,我想添加很多JLabels它。但滾動條不起作用。我無法使用滾動條,即使面板已滿,它也不會滾動。這裏是我的代碼:JAVA JScrollPane沒有顯示

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 


public class Scroll { 
public static void main(String[] args) { 
    JPanel panel = new JPanel(new GridLayout(0,1)); 
    JPanel p = new JPanel(new BorderLayout()); 
    JScrollPane scroll = new JScrollPane(panel); 
    scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
    p.add(scroll, BorderLayout.NORTH); 
    JButton but = new JButton("OK"); 
    p.add(but, BorderLayout.SOUTH); 
    but.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      panel.add(new JLabel("Some random text")); 
      scroll.revalidate(); 
      p.repaint();p.revalidate(); 
     } 
    }); 
    JFrame frame = new JFrame(); 
    frame.setSize(800,200); 
    frame.setVisible(true); 
    frame.add(p); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLocationRelativeTo(null); 
} 
} 
+0

不是你的問題的答案,但它似乎你想在這裏使用'JList' – Reimeus

+0

這就是對的。謝謝:) – Ben

回答

0

你的問題似乎與你的佈局經理。當你不使用BorderLayout.CENTER位置時,我認爲BorderLayout的行爲很奇怪。我改了行

p.add(scroll, BorderLayout.NORTH); 

p.add(scroll, BorderLayout.CENTER); 

然後,以使文本從上而不是居中出現,我改變了佈局管理器面板構件到的BoxLayout。來源:

JPanel panel = new JPanel(new GridLayout(0, 1)); 

JPanel panel = new JPanel(); 
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

這似乎已經給了我想要的功能。讓我知道這是否可以解決您的問題!

+0

謝謝你。有用 ! – Ben

0

如上所述,您應該使用JListJTable來實現您的用例。

關於這個問題,這是因爲除的CENTER所有BorderLayout限制將擴大到儘可能多的空間及其部件佔據,即使這意味着他們將擴大了屏幕邊界的(你的情況NORTH部分擴展到每個按鈕點擊後南方)。

爲了解決這個問題,明確指定了可以無限增長的組件的首選大小,如果你把它們添加到非中央面板與BorderLayout

scroll.setPreferredSize(new Dimension(-1, 100)); 

我用-1這裏的width指示(我可以使用任何其他值)並不重要,因爲無論如何它都會被佈局管理器忽略(BorderLayout.NORTH組件被水平拉伸以獲取所有可用的水平空間)。