亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

getWidth()/getHeight() 和 getPreferredSize().width

getWidth()/getHeight() 和 getPreferredSize().width

慕妹3146593 2023-05-17 15:06:08
我正在嘗試使用在調整 JFrame 大小時動態調整大小的鍵來繪制鍵盤。此外,鍵可以有不同的大小。我有一個面板,其布局設置為BorderLayout. 在中心,我放置了一個面板,其布局設置為GridLayout(5,1).網格的每一行都是一個JPanelwith FlowLayout。在每一行中,我計算每個按鈕并通過調用該setPreferredSize方法設置其首選大小。運行程序時,我只看到一些外觀怪異的按鈕。getWidth()/getHeight()當我用和用 檢查行面板時getPreferredSize().width/height,我得到了不同的值: 對于getPrefereedSize().width,我得到了我真正設置的寬度,但是對于getWidth()我得到了一個明顯較低的值。兩種方法之間有區別getWidth()嗎getPreferredSize().width?
查看完整描述

2 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

還有一些關于getSize()and的其他問題getPreferredSize(),但我沒有找到可以被視為重復的問題。所以開始了...)

Swing 中的組件通常有一個首選大小。這是調用該方法時返回的大小getPreferredSize。它是組件“想要”的大小,以便正確顯示。例如,JLabel具有特定文本和字體的 a 將具有剛好足以顯示整個文本的首選大小。

但是當一個組件顯示在屏幕上時,可能無法以其首選大小顯示它(一些原因將在下面解釋)。因此在調用時getSize,該方法將返回組件當前在屏幕上的實際大小。當包含框架調整大小時,組件也可能調整大小,然后再次返回不同的值。

(請注意,getSize()基本上返回一個對象,該對象包含與getWidth()and返回的值相同的值getHeight())。


為什么不能始終確保實際尺寸與首選尺寸匹配:

Swing 中的布局通常由布局管理器處理。詳細信息在有關在容器中布置組件的教程中進行了說明,但我將在此處嘗試總結與此問題相關的部分。

這樣的布局管理器將嘗試以其首選大小布置組件??梢韵胂筮@是困難的,有時甚至是不可能的。想象一個GridLayout(1,2)包含兩個其他面板的面板:

+---------------------+---------------------+

|? ? ? ? ? ? ? ? ? ? ?|? ? ? ? ? ? ? ? ? ? ?|

|? Preferred Size:? ? |? ?Preferred Size? ? |

|? ? ?400 x 300? ? ? ?|? ? ? 100 x 200? ? ? |

|? ? ? ? ? ? ? ? ? ? ?|? ? ? ? ? ? ? ? ? ? ?|

+---------------------+---------------------+

在 中GridLayout,所有組件的大小必須相同。但他們的首選尺寸不同。所以布局管理器根本無法確保面板的實際尺寸與其首選尺寸相同。因此它以介于兩者之間的折衷大小顯示它們。(它還可能考慮到最小和最大尺寸,使其更加困難......)。最后,兩個面板的大小可能是(例如)(300,200)像素,即使首選大小是(400,300)和(100,200)像素。


特別是關于您描述的布局:請注意,FlowLayout這里有點特別。如果有足夠的空間,它將以首選大小布置組件。如果沒有足夠的空間,則某些組件可能不可見。因此,您可以嘗試將行中的 更改FlowLayout為 a?GridLayout(1,n),其中n是該行中的鍵數。


查看完整回答
反對 回復 2023-05-17
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

組件的 getWidth/getHeight 返回當前尺寸。getPreferredSize 返回組件想要獲取的內容。例如,帶有文本的按鈕將返回首選大小,因此文本將完全可見。

合理的布局管理器會向子組件詢問它們的首選尺寸,并為它們提供這些尺寸。這將導致父組件的首選大小。如果將父組件設置為較小的尺寸,則它不能再強制執行子組件的首選尺寸,并且要么隱藏一些組件,要么使組件變小。


查看完整回答
反對 回復 2023-05-17
  • 2 回答
  • 0 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號