2010-02-12 103 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部分,了解哪些布局管理器可以帮助您实现自己想要的功能。