2011-10-10 25 views
4

我已經創建了JPanel並且已經添加了組件,並且我將通過JPanel傳遞給PopUpFactory ...因此,在傳遞之前可以獲取JPanel的大小嗎?在實現之前獲取JPanel的大小

我把JLabel的把它和文字後,我不知道文字的大小...

+0

工廠應根據需要調整面板尺寸。如果沒有,請查看kleopatra和camickr上的答案[爲什麼JTable頭文件沒有出現在圖像中?](http://stackoverflow.com/questions/7369814/why-does-the-jtable-header-沒有出現在圖像中)重點是創建一個圖像,但大小是圖像構造函數所必需的。 –

+0

嗯不太瞭解你的設置 - 你首先顯示彈出窗口,然後將標籤文本從null設置爲其他內容?爲什麼/何時/何種控制文字設置?順便說一句,最好展示一個小的可運行示例,以便快速查看:-) – kleopatra

+0

哦,並且解釋法老,'爲了更快地獲得更好的幫助,請發佈[SSCCE](http://pscode.org/sscce.html) 」。 ;) –

回答

0

只需調用getPreferredSize方法爲JLabel.No問題,如果沒有實現它的容器中,首選大小變化,如果你要設置的文字Ø甚至在您將其設置爲可見之前。

+0

我以同樣的方式做它,然後才能看到答案:D感謝所有人))) –

3

您可以設置使用setPreferredSize(Dimension)首選大小;例如

JPanel pnl = new JPanel(new BorderLayout()); 
pnl.setPreferredSize(new Dimension(640, 480)); 

該值將隨後通過調用getPreferredSize()獲得,鋪組件時會用到,但要注意的是不能保證它實際上在這個尺寸進行渲染。

爲什麼在渲染之前實際需要大小?通常在Swing編程中,您不需要處理明確的尺寸/尺寸,因爲所選佈局將爲您處理這些細節。

編輯

爲了解決OP的關於JTextField查詢,在這裏一個選項,它調用接受該預測的列數int基於構造函數。這會導致文本字段足夠寬以支持該字符數。

我的第二點論述了setXXXSize方法決不應該直接調用並且開發人員完全依賴於LayoutManager的評論。這並不總是合適的 - 通常有必要設置主應用程序框架的首選大小。例如,假設我在Swing中編寫了一個簡單的瀏覽器應用程序。大部分主框架是用於呈現HTML的JEditorPane。如果我沒有爲此組件(或包含框架)設置首選大小,並且我呼叫pack(),框架可能會盡可能小,而不是合理的尺寸。

+0

我把Jlabel插入它和文本之後,我不知道文本的大小...所以我想獲得大小(不設置)。 –

+1

你可以嘗試getSize()或getPrefferedSize() – tiger

+0

@tiger它們都返回0 ... –

2

JComponents沒有回報getSizegetLocationgetBoundsgetXxxSize如果JComponents先前尚未在屏幕上可見或調用之後pack()

但爲什麼關心這個,因爲使用(正確無誤) LayoutManager可以自動做到這一點,這之所以LayoutManager存在那裏,真正何必在乎那

相關問題