【问题标题】:JPanel: layout help neededJPanel:需要布局帮助
【发布时间】:2019-01-25 17:52:47
【问题描述】:

我想构建这个布局:

其中包含一个标签、一个文本字段、2 个按钮和一个可变高度的文本区域(从 1 行到 40 多行)。我正在尝试使用GridBagLayout,但没有成功。按钮在彼此之上,我不知道如何设置每个元素的大小,并且它们之间没有空格。这是到目前为止的代码:

    GridBagLayout gridbag = new GridBagLayout();
    this.setLayout(gridbag);
    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;

    c.gridx = 0;
    c.gridy = 0;
    c.gridwidth = 4;
    gridbag.setConstraints(lblGuidelines, c);
    this.add(lblGuidelines);

    c.gridx = 0;
    c.gridy = 1;
    c.gridwidth = 4;
    gridbag.setConstraints(txtNumberInput, c);
    this.add(txtNumberInput);

    c.gridx = 0;
    c.gridy = 2;
    c.gridwidth = 2;
    c.weightx = 0.5;
    gridbag.setConstraints(btnCheck, c);
    this.add(btnCheck);

    c.gridx = 0;
    c.gridy = 2;
    c.gridwidth = 2;
    c.weightx = 0.5;
    gridbag.setConstraints(btnClear, c);
    this.add(btnClear);

    c.gridx = 0;
    c.gridy = 3;
    c.gridwidth = 4;
    gridbag.setConstraints(textArea, c);
    this.add(textArea);

【问题讨论】:

  • c.gridx = 0; 必须是 c.gridx = 1; 用于第二个按钮,c.gridwidth = 2 应应用于所有其他组件,但不能应用于按钮

标签: java swing layout layout-manager gridbaglayout


【解决方案1】:

类似...

基本上,您需要将第二个按钮的gridx 位置设置为1 而不是0。此外,指定不存在列的gridwidth 是没有意义的,这可能会导致问题,但大多数情况下,这些列的虚拟宽度为0,因此不会很重要

GridBagLayout gridbag = new GridBagLayout();
this.setLayout(gridbag);
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;

JLabel lblGuidelines = new JLabel("Please neter a telephone number and check if it's valid or not");
JTextField txtNumberInput = new JTextField(12);
JButton btnCheck = new JButton("Check");
JButton btnClear = new JButton("Clear");
JTextArea textArea = new JTextArea(20, 12);

c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.insets = new Insets(8, 8, 8, 8);
c.weightx = 1;
this.add(lblGuidelines, c);

c.gridx = 0;
c.gridy = 1;
this.add(txtNumberInput, c);

c.gridx = 0;
c.gridy = 2;
c.gridwidth = 1;
c.weightx = 0.5;
this.add(btnCheck, c);

c.gridx = 1;
c.gridy = 2;
this.add(btnClear, c);

c.gridx = 0;
c.gridy = 3;
c.gridwidth = 2;
c.weightx = 1;
this.add(new JScrollPane(textArea), c);

【讨论】:

  • 我尝试了该解决方案,但现在所有组件都在一行中,除了它们下方的文本区域...查看更新后的帖子
  • @aggtr 看看我是如何处理添加组件的,比如你做this.add(btnCheck);,我做this.add(btnCheck, c);
猜你喜欢
  • 1970-01-01
  • 2012-01-26
  • 2013-09-25
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2012-05-22
  • 2020-11-07
  • 1970-01-01
相关资源
最近更新 更多