2010-02-12 137 views
2

我通過使用方法'parent.addTab(child)'將子面板添加到父面板,並在子面板中添加了一個JLabel,但setBounds方法在子面板中不起作用。這JLabel正在一個修復位置顯示。在父面板中,setBounds工作正常。該怎麼辦?Java Swing佈局問題

回答

2

您需要爲您的子面板定義合適的佈局管理器。例如,如果您選擇使用BorderLayout,你可以安排在標籤面板的中心顯示如下:

JTabbedPane parent = new JTabbedPane(); 
JPanel child = new JPanel(new BorderLayout()); 

// Create label with centrally aligned text (default is left). 
JLabel label = new JLabel("Hello, World", JLabel.CENTER_ALIGNMENT); 

// Add label to center of the child panel. 
child.add(label, BorderLayout.CENTER); 

// Add child panel as a tab within parent JTabbedPane. 
// The child panel will expand to fit the size of the tab. 
parent.addTab("My Tab", child); 

更多靈活的佈局考慮使用GridBagLayout

0

setBounds僅適用於佈局設置爲null的容器。 (或用於在桌面上移動框架)。

JPanel的默認佈局管理器是FlowLayout,它按水平順序佈置組件,並在當前填滿時(如頁面中的文本)拖放到新行。

使用null佈局和setBounds不奠定了GUI的一個推薦的方式 - 這是非常脆弱的 - 過分依賴於容器/框架和桌面可以輕鬆突破的尺寸,分辨率和字體設置的大小布局。

通讀Swing教程的Using Layout Managers部分,瞭解哪些佈局管理器可以幫助您實現自己想要的功能。