2014-03-13 25 views
1

在我開始之前,我知道不使用佈局管理器是一個糟糕的主意,通常我使用一個佈局管理器,但是,我也將所有組件自動重新調整大小並根據窗口大小進行重新定位。另外,我正在開發的程序只能在一臺機器上運行。請不要因爲缺乏佈局管理器而低估我,我發現它是我爲這個特定程序所需要的。在沒有佈局管理器的情況下將JScrollPane添加到JPanel

對我的問題,我發現了一個類似的帖子在stackoverflow但解決方案從未實現。 我給我的JPanel添加了一個動態數量JLabels,我注意到當不使用佈局管理器時,滾動器不起作用。

這是我的初始化代碼的簡化版本。

JPanel mypanel = new JPanel(); 
mypanel.setLayout(null); 
mypanel.setSize(800,450); 
mypanel.setForeground(Color.WHITE); 
mypanel.setBackground(Color.BLACK); 
scrollablePanel = new JScrollPane(mypanel); 
scrollablePanel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
scrollablePanel.setPreferredSize(new Dimension(800,300)); 
scrollablePanel.setSize(800,300); 
scrollablePanel.setLocation(250,156); 
myContainer.add(scrollablePanel); 

其中myContainer將是容器(也沒有佈局管理器)。 JLabels稍後添加到JPanel上:

enter code here mypanel.add(label1);

爲標籤設置了一些基本設置後,如setForegroundsetBackground

不幸的是運行時,彷彿它不是必需的出現滾動條(見圖片)

http://i.imgur.com/zp0QKGG.png

圖像中看到的表中的文本是由多個JLabels的。 如果不使用佈局管理器無法解決問題,我將切換到BoxLayout,我只是希望能有一個解決方案。

+0

'JScrollPane'依賴結果來自視圖的'getPreferredSize'方法,該方法依賴於'LayoutManager' ... – MadProgrammer

+0

因此無法使其工作,或者是否可以手動設置PrefferedSize? – Cody

+1

@ alex2410但它永遠不會顯示滾動條清除程序... – MadProgrammer

回答

4

問題是JScrollPanel需要視圖組件的首選大小來確定視圖何時超出滾動窗格的可視區域。

組件的首選大小通常由佈局管理器確定。雖然你可以使用setPreferredSize,但它通常是令人沮喪的,並且只會遇到同樣的問題,因爲內容超出了你決定設置的價值。

一個更好的解決辦法是使用LayoutManager或化合物佈局(使用多個佈局管理器在多個集裝箱)達到你想要的結果......或者自己寫...

相關問題