2011-09-23 80 views
4

我有我所知道的非常多的初學者問題與我的JScrollPanes。問題在於垂直滾動條與封閉面板內的組件重疊(在右側)。當滾動條與JComboBoxes的下拉位重疊時,會變得有點痛苦。Java ScrollPane重疊內容

我已經把問題歸結爲這個小片段 - 我希望它解釋了這個問題。

public class ScrollTest extends JFrame 
{ 
    public ScrollTest() 
    { 
     super("Overlap issues!"); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(100,0)); 

     for(int b=0;b<100;++b) 
     { 
      panel.add(new JButton("Small overlap here ->")); 
     } 

     JScrollPane scrollpane = new JScrollPane(panel); 
     add(scrollpane); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     new ScrollTest(); 
    } 
} 

我先看看,但看不到其他人是否已經解決了這個問題。對不起,如果它是重複的,非常感謝任何人都可以提供像我這樣的java新手!

+0

爲了更好地幫助越早,張貼[SSCCE](http://pscode.org/sscce.html )。 –

+0

我試過你的代碼。對我來說工作正常。 – Heisenbug

回答

4

問題是,JScrollPane的默認設置是用默認的JScrollPane.VERTICAL_SCROLLBAR_​​AS_NEEDED來佈局組件,而JScrollPane.VERTICAL_SCROLLBAR_​​AS_NEEDED又會添加滾動條,而不是再次佈置組件。

在你的榜樣,你知道你會需要一個滾動條,從而改變它始終顯示滾動條

public class ScrollTest extends JFrame 
{ 
    public ScrollTest() 
    { 
     super("Overlap issues!"); 
     JPanel panel = new JPanel(); 
     //Insets insets = panel.getInsets(); 
     //insets.set(5, 5, 5, 25); 
     //insets.set(top, left, bottom, right); 
     panel.setLayout(new GridLayout(100,0)); 

     for(int b=0;b<100;++b) 
     { 
      panel.add(new JButton("Small overlap here ->")); 
     } 

     JScrollPane scrollpane = new JScrollPane(panel); 
     scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
     add(scrollpane); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     new ScrollTest(); 
    } 
} 
+1

+1類似的用法出現在['TableAddTest']中(http://stackoverflow.com/questions/7519244/jar-bundler-using-osxadapter-causing-application-to-lag-or-terminate/7519403#7519403) 。 – trashgod

+0

+1,但當滾動條變得可見時,組件再次鋪設。問題是佈局管理器無法調整框架的大小,因此滾動條被塗在按鈕的頂部。 – camickr

+0

非常感謝羅曼。這很好地解決了我的問題! – miklatov