考慮讓totalPanel使用BorderLayout。將PanelA添加到BorderLayout.PAGE_START位置,將PanelB添加到BorderLayout.CENTER位置。
欲瞭解更多的佈局管理器,請查看教程:Lesson: Laying Out Components Within a Container
編輯:我看到你使用的BorderLayout,它「不工作」,但你不顯示的代碼。爲了更好地調整它爲什麼不起作用,請考慮向我們展示代碼。
爲了讓它工作,考慮給你的PanelX類getPreferredSize()
覆蓋,這將有助於設置JPanel的初始大小。
例如:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.*;
public class SimpleGuiLayout {
private static void createAndShowGui() {
JPanel totalPanel = new JPanel(new BorderLayout());
totalPanel.add(new PanelX(800, 200, "Panel A"), BorderLayout.PAGE_START);
totalPanel.add(new PanelX(800, 400, "Panel B"), BorderLayout.CENTER);
JFrame frame = new JFrame("Simple Gui Layout");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(totalPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class PanelX extends JPanel {
private int prefW;
private int prefH;
public PanelX(int prefW, int prefH, String title) {
this.prefW = prefW;
this.prefH = prefH;
setBorder(BorderFactory.createTitledBorder(title));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(prefW, prefH);
}
}
如果運行,它看起來像這樣:
,並會適當地調整。
你可以發表一個[SSCCE](http://www.sscce.org)來說明你所嘗試過的嗎? –
你試過GridBag嗎? http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html –