在哪個Swing佈局管理器中,可以通過編程方式更改佈局區域?以及如何以最低的成本做到這一點?佈局管理器區域的動態調整大小
我必須創建具有與JSplitPane類似功能的組件,但需要從頭開始創建三個面板。其中一個時刻是點擊分隔線上的oneTouchExpandable按鈕後展開/摺疊其中一個面板。但問題是,我不知道如何實施這一崩潰行動。我試着將面板寬度設置爲0,但包含此面板的佈局區域在組件後不收縮。我試圖在所有佈局管理器中執行此操作,但效果相同。
謝謝。
在哪個Swing佈局管理器中,可以通過編程方式更改佈局區域?以及如何以最低的成本做到這一點?佈局管理器區域的動態調整大小
我必須創建具有與JSplitPane類似功能的組件,但需要從頭開始創建三個面板。其中一個時刻是點擊分隔線上的oneTouchExpandable按鈕後展開/摺疊其中一個面板。但問題是,我不知道如何實施這一崩潰行動。我試着將面板寬度設置爲0,但包含此面板的佈局區域在組件後不收縮。我試圖在所有佈局管理器中執行此操作,但效果相同。
謝謝。
感謝所有的答案。最後,我結合了幾個答案的解決方案。
我的最終解決方案如下: 我使用BorderLayout,設置West,Center和East面板,然後通過將PreferencesSize設置爲West和East面板來操縱它們的大小。渲染方案如下:在佈局BorderLayout組件時,將東西方面板的PreferredSize和剩餘空間分配給中央面板。因此,通過一些簡單的計算,我可以輕鬆地操作三個面板中的每一個面板的尺寸。
我還在西面板和東面板上添加了分隔線(最初只是JPanel組件具有固定大小)(計算時也考慮了它們的大小)。對於動態調整大小,我會處理拖動此分隔線上的事件並重新計算面板大小。
使用以下代碼片段完成刷新: container.setVisible(false); container.revalidate(); container.repaint(); container.setVisible(true);
我想把這段代碼放到別處可用,但不知道在哪裏可以做到這一點。所以如果你知道這樣的地方,請在評論中指向我。
所有佈局管理器動態調整大小。但是,寬度和高度屬性是佈局的結果,並且將被覆蓋。
你應該看看屬性的是preferredSize, minimumSize
,並且maximumSize
- 佈局管理立足於這些屬性他們的計算,但具體效果取決於佈局管理器(如BorderLayout這將給北,南,西,東部件的首選大小如果possibe並將其餘部分分配給CENTER組件)。
更改尺寸屬性後,您必須在容器上調用revalidate()
,然後您應該看到更改。
在GUI可見後,當進行影響面板佈局的更改時,需要重新驗證()基本上調用面板佈局的面板。你的情況可能更容易簡單地使組件不可見:
component.setVisible(false);
panel.revalidate();
panel.repaint(); // this is only required sometimes
我與重新驗證()/首選大小的答案,但只是想表明這一點:不要重新發明輪子!使用JIDESplitPane(JIDE的免費「公共層」的一部分) - 它支持兩個以上的分割。
是的,我看了這個方法並準備好使用它,但它不允許在面板之間使用分隔線進行操作,我需要使用OneTouchExpandable按鈕來模擬JSplitPane行爲等等。但對於任何不需要控制分頻器的人來說,這可能是一個很好的解決方案 – 2009-10-05 14:04:37
不太清楚你的意思是「它不是合法的操縱......」它的行爲完全像標準的分割窗格,它甚至有一個觸摸可擴展功能內置在... – CarlG 2009-10-05 15:54:54
您能否指出我對此方法的一鍵式可擴展功能進行了解釋的確切位置?先謝謝你。 – 2009-10-12 11:27:51