【问题标题】:BorderLayout.Center is not working with JPanelBorderLayout.Center 不适用于 JPanel
【发布时间】:2020-08-03 20:22:02
【问题描述】:
public class BorLay 
{

  BorLay()
  {
      JFrame frame=new JFrame("Connect");
      JPanel panel=new JPanel();
       frame.setLayout(new BorderLayout());
       frame.add(panel,BorderLayout.CENTER);
       panel.add(new JTextField("Click1"));
       panel.add(new JTextField("Click2"));
       frame.setVisible(true);
       frame.setSize(400,500);

  }
  public static void main(String args[])
  {
      new BorLay();
  }
}

当 JPanel 添加到 JFrame 时,上面的代码不起作用。但是如果将 JTextField 直接添加到 JFrame 则它正在工作。

【问题讨论】:

  • 不工作是什么意思?发布的代码应显示两个文本字段。
  • 但两者都应该在框架的中心。
  • 同意@c0der,您显示的 GUI 正是我对代码的期望。以最小尺寸提供 ASCII 艺术或 GUI 的预期布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以显示应如何使用额外空间。
  • @AndrewThompson 两个文本字段都是 BorderLayout.NORTH 但我希望它们位于中心。
  • edit您的问题并解释不工作"。布局是前架设的。请查看docs.oracle.com/javase/tutorial/uiswing/layout/border.html

标签: java swing jpanel layout-manager border-layout


【解决方案1】:

要将包含文本字段的面板居中,请将其添加到 GridBagLayout

红色边框显示了包含它们的面板如何没有变大以填充父容器(内容窗格)。

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class BorLay {

    BorLay() {
        JFrame frame = new JFrame("Connect");
        JPanel panel = new JPanel();
        panel.setBorder(new LineBorder(Color.RED, 2));
        frame.setLayout(new GridBagLayout());
        frame.add(panel);
        panel.add(new JTextField("Click1"));
        panel.add(new JTextField("Click2"));
        frame.setVisible(true);
        frame.setSize(200, 100); // make bigger as per need
    }

    public static void main(String args[]) {
        new BorLay();
    }
}

【讨论】:

  • 谢谢。但是为什么 BorderLayout.Center 不能与 JPanel 一起使用,但在将组件直接添加到框架时可以正常工作。
  • “但是当组件直接添加到框架时可以正常工作” 我不明白它是如何工作的。你能生成复制效果的代码吗?这一次,请包括导入以使测试更容易。顺便说一句 - 请参阅编辑以回答。如果您从布局中得到不寻常的结果,我建议为相关组件添加可见边框。它可以很有启发性。
猜你喜欢
  • 2015-01-10
  • 2011-09-18
  • 2012-01-19
  • 2018-07-07
  • 1970-01-01
相关资源
最近更新 更多