2013-09-24 117 views
0

我想根據面板的大小來設置JTextPane的大小,以便當我添加其他面板時,它會相應地改變。但它只是在中心提供一個小文本窗格,當我添加一些文本時,它的大小會相應變化。如何根據JPanel的大小設置JTextPane的大小?

JPanel panel = new JPanel(); 
JTextPane txt = new JTextPane(); 
JScrollPane pane = new JScrollPane(); 
pane.add(txt); 
panel.add(pane,BorderLayout.CENTER); 
add(pane); 

現在jtextpane就像一個小盒子一樣出現在屏幕的中心。我希望它根據面板的尺寸出現

+0

幾乎不是一個完整的問題 - 如果我把它放入擴展JFrame並運行它的類中的方法,它會終止而不顯示任何東西。我可以將調用添加到pack()和setVisible(),但它仍然不會使面板可見。你在一個未知的類上調用add()。這就是爲什麼海報經常被要求提供*可執行文件的例子;我們可以將其粘貼到IDE和RUN中,以展示問題所在。當我們處理它時,「根據面板的大小」這個短語讓我們猜測一點;你的意思是你想讓文字窗格填滿面板嗎? – arcy

+0

相關[示例](http://stackoverflow.com/a/17510427/1057230) –

回答

4

JPanel默認使用FlowLayout它根據它們的優選尺寸對組件進行尺寸調整。您可以使用BorderLayout這將使用可能的最大面積。

同樣使用約束如BorderLayout.CENTER除非容器實際使用BorderLayout,否則不起作用。不要add組件到JScrollPane。這將取代組件視圖內的所有組件。相反設置JTextPaneViewPortView,例如

JPanel panel = new JPanel(new BorderLayout()); 
JTextPane txt = new JTextPane(); 
JScrollPane pane = new JScrollPane(txt); 
// pane.add(txt); remove 
panel.add(pane, BorderLayout.CENTER); 

閱讀:

+0

這個編輯是否有效:'JPanel panel = new JPanel(new GridLayout());'現在panel正在使用'GridLayout', panel.add(pane,BorderLayout.CENTER);'這裏好像使用'BorderLayout'! –

+1

哎呀,太多的斬波和改變,更正 - 謝謝:) – Reimeus

3

您加入pane兩次。將panel添加到您的基地(一個JFrame?),並記住實際設置您的JPanel使用BorderLayout

+1

一個錯字...我的意思是添加(面板) – UsamaMan

相關問題