Java 如何将面板拆分为子面板?

Java 如何将面板拆分为子面板?,java,swing,layout,jpanel,panel,Java,Swing,Layout,Jpanel,Panel,我已经有了一个面板,它是由一排按钮组成的,并且它位于一个框架南部的底部,但是我想在它下面添加两行面板/子面板,一个文本输入行和一个输出行(如果有必要的话)。现在我知道要做的唯一一件事就是声明并添加更多的面板,这很好,但是当我指定.SOUTH时,它们会覆盖上一个面板的顶部 编辑:我使用的解决方案 根据Ted Hopp的建议,我将原来的面板(现在称为subPanel1)以及位于原来subPanel2和subPanel3顶部的两个新面板添加到第四个容器面板底部CotainerPanel。因为我只有三个

我已经有了一个面板,它是由一排按钮组成的,并且它位于一个框架南部的底部,但是我想在它下面添加两行面板/子面板,一个文本输入行和一个输出行(如果有必要的话)。现在我知道要做的唯一一件事就是声明并添加更多的面板,这很好,但是当我指定.SOUTH时,它们会覆盖上一个面板的顶部

编辑:我使用的解决方案

根据Ted Hopp的建议,我将原来的面板(现在称为subPanel1)以及位于原来subPanel2和subPanel3顶部的两个新面板添加到第四个容器面板底部CotainerPanel。因为我只有三个子面板,这允许我指定每个子面板在containerPanel中的位置,使用NORTH、CENTER、SOUTH,如果您有3个以上…,可能需要做一些稍微不同的事情,然后指定contianerPanel在frame SOUTH中的位置

    subPanel1.setLayout(new GridLayout(1,6)); //Layout of subPanel1
subPanel1.add(clearButton);
subPanel1.add(customerNameLabel);
subPanel1.add(customerNameTextField);
subPanel1.add(showByNameButton);
subPanel1.add(openNewSavingsButton);
subPanel1.add(openNewCheckingButton);


subPanel2.add(sendChatTextField);
subPanel2.add(sendButton);
subPanel2.add(clearButton2);

subPanel3.add(receiveChatTextField);
subPanel3.add(nextButton);
subPanel3.add(previousButton);

bottomContainerPanel.setLayout(new GridLayout(3,1));   //Layout of Container Panel
bottomContainerPanel.add(subPanel1, BorderLayout.NORTH);
bottomContainerPanel.add(subPanel2, BorderLayout.CENTER);
bottomContainerPanel.add(subPanel3, BorderLayout.SOUTH);

tellerWindow.getContentPane().add(bottomContainerPanel, BorderLayout.SOUTH);

需要添加单个容器面板作为框架的南面板。容器本身的布局应符合您对底部所有内容的要求。

您需要添加一个容器面板作为框架的南面板。容器本身的布局应该符合您对底部所有内容的要求。

如果您只想在南部和北部将面板分成两个相等的部分,请使用GridLayout。如果你想要中间的东西,你可以使用边界布局。
如果您想让用户能够更改子面板的大小,请使用JSplitPane。

如果您只想在南部和北部将面板拆分为两个相等的部分,请使用GridLayout。如果你想要中间的东西,你可以使用边界布局。
如果您想让用户能够更改子面板的大小,请使用JSplitPane。

我在尝试将几行按钮放入从ListDemo示例借用的面板时遇到了类似的问题。首先要做的是阅读关于BorderLayout:,或者至少看到上面显示的图像:

在BorderLayout中不能有多个底部行。但您可以使用嵌套布局。我们需要的是BoxLayout,请参见:

我们只需将上图中显示的按钮替换为一排按钮

public class MyStuff extends JPanel {
  ...
  public MyStuff() {
    super(new BorderLayout());
    ...
    JPanel buttonArea = new JPanel();
    buttonArea.setLayout(new BoxLayout(buttonArea, BoxLayout.PAGE_AXIS));
    add(buttonArea, BorderLayout.PAGE_END);
    ...
    //if you dislike the default center alignment:
    //panelWithButtons1.setAlignmentX(Component.LEFT_ALIGNMENT);
    buttonArea.add(...);// add the 1st panel with buttons
    buttonArea.add(...);// add the 2nd panel with buttons
    buttonArea.add(...);// add the 3rd panel with buttons

我在尝试将几行按钮放入从ListDemo示例借用的面板时遇到了类似的问题。首先要做的是阅读关于BorderLayout:,或者至少看到上面显示的图像:

在BorderLayout中不能有多个底部行。但您可以使用嵌套布局。我们需要的是BoxLayout,请参见:

我们只需将上图中显示的按钮替换为一排按钮

public class MyStuff extends JPanel {
  ...
  public MyStuff() {
    super(new BorderLayout());
    ...
    JPanel buttonArea = new JPanel();
    buttonArea.setLayout(new BoxLayout(buttonArea, BoxLayout.PAGE_AXIS));
    add(buttonArea, BorderLayout.PAGE_END);
    ...
    //if you dislike the default center alignment:
    //panelWithButtons1.setAlignmentX(Component.LEFT_ALIGNMENT);
    buttonArea.add(...);// add the 1st panel with buttons
    buttonArea.add(...);// add the 2nd panel with buttons
    buttonArea.add(...);// add the 3rd panel with buttons

发布您的代码,以便我们能够更好地建议在何处进行修改。发布您的代码,以便我们能够更好地建议在何处进行修改。