2011-03-07 66 views
1

我正在研究一個包含左側JScrollPane中項目列表的小程序。JScrollPane:如何自動調整滾動中包含的JPanel的大小

用戶將能夠從這個列表中添加和刪除元素。因此

我需要創建一個滾動列表。

這部分很容易。

我通常很想做大部分手動調整圖形用戶界面的工具,但我在JScrollPane的文檔中看到,最好讓它能夠處理它而不是手動更改尺寸。

問題是我不斷添加元素,並且內部面板不會更改大小。

有什麼想法?

這裏是一些我使用的代碼: 構造:

public SideBarView(Dimension d) { 

     super(d); 
     Dimension d2 = new Dimension(100,300); 

     this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); 
     //INSIDE VIEW (zone that is being scrolled) 
     container = new SideBarContainer(d2); 

//  container.setSize(d2); 
//  container.setPreferredSize(d2); 
//  container.setMaximumSize(d2); 
//  container.setMinimumSize(d2); 


     scrollPane = new MyJScrollPane(container); 

     new ImageLoaderWorker(this,menuButton).execute(); 

     Dimension d3 = new Dimension(d.width, d.height-d.width); 
     scrollPane.setSize(d3); 
     scrollPane.setMaximumSize(d3); 
     scrollPane.setMinimumSize(d3); 
     scrollPane.setPreferredSize(d3); 

     add(scrollPane,BorderLayout.PAGE_START); 
     setBorder(BorderFactory.createEmptyBorder()); 
} 

添加到容器:

element = new JPanel(); 
     Dimension d2 = new Dimension(100,100); 

     element.setSize(d2); 
     element.setPreferredSize(d2); 
     element.setMaximumSize(d2); 
     element.setMinimumSize(d2); 

     element.setBackground((panelcount++%2==0)?Color.BLUE:Color.RED); 
     cointainer.add(element); 

任何想法,我缺少的是什麼?還是我應該隨手調整容器的尺寸?

+0

爲了更好地提供幫助,請發佈SSCCE(http://pscode.org/sscce.html)。 – 2011-03-07 11:58:24

回答

4

你需要告訴容器佈置的組件。這是通過重新驗證面板完成的:

container.add(element); 
container.revalidate(); 
2
panel.setSize(d2); 
panel.setPreferredSize(d2); 
panel.setMaximumSize(d2); 
panel.setMinimumSize(d2); 

這讓我們沒有選擇調整揮杆,因爲你告訴佈局管理器使用完全相同D2(100/100)的大小。

嘗試不使用setMaximumSizesetPreferredSize。您也許需要在添加/刪除內容後使面板或滾動條無效。

編輯:
我想我認爲panel是你的遏制者。你能提供你的scrollpane和容器的設置代碼嗎?

你設置了容器的佈局管理?

+0

實際上,您引用的代碼(添加到容器)是我要滾動的元素列表,因此它們的大小是固定的,在構造函數中您會注意到所有「容器」設置都是默認值 – 2011-03-07 10:11:53

+0

是,但是什麼是SideBarContainter?你自己的類從JPanel繼承? – Thomas 2011-03-07 10:13:24

+0

SideBarContainter簡直是一個JPanel,(我用它來幫助handleing鼠標事件,如彈出菜單) – 2011-03-07 10:16:43

0

另一種可能性,如果你不必親自去做,可以使用一些SwingX組件(如TaskPane等)。不幸的是,它們似乎正在轉換到java.net,因此許多資源目前尚未提供。但是,有一個基本的download page