[英]Auto resize swing elements to fit to the container's size
不知道我需要什么。 我有一個包含一些內部元素的容器(JPanel)。 我想知道是否有可能迫使內部元素適應容器的大小。 我需要使它們完全可見,即調整其大小以適合面板的尺寸,並且不切割內部元素的某些部分。
滾動不是一種選擇。
使用Layout或其他方法可以做到嗎?
編輯:重要說明:問題是我無法訪問內部元素,也無法訪問其屬性,因此我想說需要一個能夠調整子元素大小以適合其大小的Layoutmanager。 我測試了BorderLayout和GridBagLayout,但結果始終相同,內部元素被裁剪掉。
正是出於這個原因,存在LayoutManagers 。 除不能夠直接處理大多數完整GUI的GridBagLayout
,所有LayoutManagers
直接用於簡單容器。
對於大多數競爭性GUI,您可以選擇以下選項:
JPanel
且每個JPanels
都有具有相同或不同LayoutManager
子JPanels
GridBagLayout
相同 您可以將JPanel
布局設置為邊框布局,然后將單個子項添加到中心。 如果有多個子代,則此方法的用處將減少,因為添加到NORTH
, SOUTH
, EAST
和WEST
將保持靜態大小,而中心將調整大小以填充其余部分。
簡而言之,這不是理想的解決方案。 由於不同組件的行為方式不同,因此Swing中的所有布局都變得更加復雜,因此,您確實需要提供希望添加到面板中的子組件的更多詳細信息,以及那些已被覆蓋的行為組件。
最好的方法是嘗試幾個簡單的示例,以了解獲得的里程數以及子組件嵌套的微妙重新設計是否會有所幫助。
我在JDesktopPane中使用了JInternalFrame。 我希望在調整桌面窗格的大小時對internal_frame進行自動調整大小,因此我必須為放置以下代碼的內部框架實現AncestorResized事件:
this.setPreferredSize(this.getParent().getPreferredSize());
this.pack();
它對我有用:)
您可以根據情況使用GridBagLayout或BorderLayout之類的布局。 適當的重量是可能的。
在我看來,這應該只是偷看一個合適的布局管理器並使用它。 例如,查看BorderLayout-將您的組件放在CENTER中,它將占據所有區域。 由每個具體的布局管理者來決定組件的大小。 標記
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.