2017-01-30 60 views
-2

不幸的是,我多次看到這個問題,但不幸的是我不知道我做得足夠好以便能夠解釋我必須在我的自己的代碼。在運行時添加組件後如何使JScrollPane可滾動

我在netbeans中使用了GUI編輯器來創建一個JScrollPane和一個JPanel。我知道我可以在運行時創建這些組件,但是這證明是有問題的,只需在編輯器中添加滾動窗格和麪板,並在運行時添加組件到目前爲止已爲我工作。

到目前爲止,創建組件,並將它們添加到面板是沒有問題的。我面臨的問題是,滾動窗格不會自動更新以使用戶能夠進一步向下滾動查看底部創建的組件。每次按下按鈕時,我一直在生成「條目」,目前創建一個JTextField並將此組件添加到面板中,稍後將添加更多組件,但現在這只是試驗。

一旦'條目'的'列表'超過了窗口的限制,就必須調整窗口的大小以便查看底部的組件,但是在一定數量的條目(大約25-30)之後,組件是由於滾動條不能向下滾動面板,因此不再可見。

這是我如何在運行時添加組件...

JTextField txtName1 = new JTextField(); 

txtName1.setLocation(10, 90); 
txtName1.setSize(135, 25); 

pnlContainer.add(txtName1); 

的「pnlContainer」裝上「jspContainer」,這是我的JScrollPane的頂部,我使用的是「重繪()」方法來獲取面板上可見的組件。

到目前爲止,在運行時添加組件已運行,所有組件都可見且可交互。

我是相當新的總體規劃與僅僅幾年的經驗,任何文件可以幫助,輔導或其他任何東西是極大的讚賞。由於我仍然有很多東西需要學習,因此始終歡迎文檔。

+0

我也很感激我如何能提高我的措辭我的問題的辦法的意見,我知道它已經問過,但我不明白一些我在看的例子,因此,同樣的原則不能適用於我的代碼。此外,由於我對此相當新,我不知道我應該問什麼問題,我應該問他們爲了找到相對的結果。 –

+0

1)參加[遊覽]並瀏覽[幫助],然後閱讀[問]以及如何發佈有效的[mcve]或[簡短,獨立,正確示例](http://sscce.org)。請注意,這個問題是無關緊要的,因爲它要求教程/文檔,並且缺少能夠證明您的問題的MCVE。 – Frakcool

+0

我只是想讓滾動窗格使用戶能夠向下滾動整個程序。我沒有完全理解JScrollPane是如何工作的,netbeans文檔並沒有真正幫助很多。我有一個JScrollPane和一個JPanel,在執行過程中,當按下按鈕時,更多的組件被添加到面板中,但是當面板上生成了很多組件時,它們會繼續從程序窗口底部繼續,這就是爲什麼我想要一個滾動條,因爲添加的組件數量將超過最大窗口高度。 –

回答

2
JTextField txtName1 = new JTextField(); 
txtName1.setLocation(10, 90); 
txtName1.setSize(135, 25); 
pnlContainer.add(txtName1); 

到目前爲止,在運行時添加組件工作過,所有的組件是可見的,相互作用,能。

在上面的代碼示例中,您將設置每個組件的大小/位置,這意味着您使用的是空佈局。不要使用空佈局!

Swing旨在與佈局管理器一起使用,並且在將佈局與佈局管理器配合使用時,滾動功能可以正常工作。

佈局管理器負責確定面板的「首選大小」。當面板的首選尺寸大於滾動面板的大小時,面板將自動顯示滾動條。

當您使用空佈局時,面板的首選大小爲0,所以滾動條永遠不會出現。

+0

好吧,我以爲默認設置了一個,我剛剛嘗試了一個幾個不同的佈局,但現在滾動條不再出現。他們之前,我嘗試了這一點,我認爲我設置面板的佈局,而不是滾動窗格,我應該使用特定的佈局? –

+0

@ D.mcadam,這聽起來像你正在添加數據行。所以也許你應該使用垂直[Box Layout](http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html)。或者,也許你應該使用[JTable](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html)來顯示你的數據行。我們沒有足夠的信息來提供具體的建議。 – camickr

+0

如果您需要更多幫助,請發佈演示問題的[mcve]。所以'MCVE'很簡單,就是一個帶有一個空面板的框架和一個用於向面板添加組件的按鈕。您可以使用大約20-30行代碼中的'MCVE'來測試此過程。一旦你理解了將知識應用於實際應用的基本概念。 – camickr

相關問題