Java 网格布局和大小调整

Java 网格布局和大小调整,java,swing,resize,gridbaglayout,Java,Swing,Resize,Gridbaglayout,对GridBagLayout有点困惑 import javax.swing.JLabel; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JTextField; import java.awt.*; import java.awt.event.*; public class MihatteFrame extends JFrame { private JTextArea area; p

对GridBagLayout有点困惑

import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;

public class MihatteFrame extends JFrame {

 private JTextArea area;
 private JTextField textField;
 private Button b;
 final static boolean shouldFill = true;

public MihatteFrame() {

    setTitle("見張ってしながら...");
    setSize(500,200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setLayout(new GridBagLayout());

    GridBagConstraints c = new GridBagConstraints();
    if (shouldFill) {
            c.fill = GridBagConstraints.HORIZONTAL;
    }

    area = new JTextArea(5, 15);
    area.setEditable(false);
    area.setCursor(null);
    area.setOpaque(false);
    area.setFocusable(false);
    area.setLineWrap(true);
    area.setWrapStyleWord(true);
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 0;
    c.gridx = 0;
    c.gridy = 0;
    c.anchor = GridBagConstraints.WEST;
    this.add(area, c);

    textField = new JTextField(20);
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 1;
    c.gridx = 2;
    c.gridy = 0;
    c.anchor = GridBagConstraints.CENTER;
    this.add(textField);
    //textField.addActionListener(this);

    b = new Button("Proceed");
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 0;
    c.gridx = 2;
    c.gridy = 0;
    this.add(b);

    setVisible(true);   
}

public void displayText(String text) {
    area.setText(text);
    //textField.setText(text)
    }

}
我了解基本情况,它工作得很好,它正在解决调整尺寸(特别是缩小尺寸)的问题

当文本区域的权重为0且文本字段的权重为1时,调整大小没有问题,但文本区域位于中心,而不是右上靠左侧,尽管存在锚定

当文本区域的权重大于0且文本字段的权重相关(例如0.2/0.8)时,所有内容看起来都像一个bug,可以进行升迁,但如果缩小,文本字段的宽度将减少到1个字符

我不介意文本区域随帧调整大小,但我希望当帧变小时,文本区域恢复到其原始大小,而不是将文本字段推到“继续”按钮上

我已经读到,我可能需要把它放在JPanel边框布局中——我不确定这在代码中会是什么样子,所以如果有人能告诉我如果是这样的话,我将不胜感激

因此,问题是:

  • 有没有一种方法可以使文本区域保持锚定在西面和西面 调整文本字段的大小时,文本字段没有缩小到较小的大小吗
  • 为什么我的锚不起作用
  • 我是否需要将文本区域放在一个与另一个布局相关的JPanel中,如果需要,代码放在哪里
  • 为什么每个人都害怕网格布局?我所看到的“我不惜一切代价避免这样做”的数量 谢谢大家!!
    (Ps.am在实现actionlistener的过程中完成了一半,所以如果它看起来完成了一半,这就是原因)。

    JTextField使用ipadx。我还建议将
    JTextArea
    放在
    JScrollPane

    JTextField
    JButton
    使用c.gridx=2两次


    最好发布帖子,让我们检查出了什么问题。

    对所有组件使用不同的GridBagConstraints对象。这应该行得通。您正在修改约束,但在添加组件时,您不会将约束作为参数传递
    this.add(textField)
    应该是
    this.add(textField,c)
    。除了JBNizet所说的之外,您还将
    JTextField
    JButton
    添加到相同的位置,即
    第0行
    第2列