Java GridBagLayout无法水平填充框架

6

我正在编写一个聊天程序的图形用户界面(GUI)。但我似乎无法使滚动条(scroller)水平和垂直地填满窗口,同时也无法使消息输入框(messageInput)水平地填满窗口。以下是截图:

enter image description here

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

public class GUI extends JFrame{

private JPanel panel;
private JEditorPane content;
private JTextField messageInput;
private JScrollPane scroller;
private JMenu options;
private JMenuBar mb;
private JMenuItem item;

public GUI(){
    /** This is the frame**/
    this.setPreferredSize(new Dimension(380,600));
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    panel = new JPanel();
    panel.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;

    /** This is where the context shows up **/
    content = new JEditorPane();
    content.setEditable(false);

    /** Scroller that shows up in the context JEditorPane **/
    scroller = new JScrollPane(content);
    c.weightx = 0.0;
    c.weighty = 0.0;
    c.gridx = 0;
    c.gridy = 0;
    panel.add(scroller, c);

    /** This is where you type your message **/
    messageInput = new JTextField();
    c.weightx = 0.0;
    c.weighty = 0.0;
    c.gridx = 0;
    c.gridy = 1;
    c.weighty = 0.5;
    panel.add(messageInput, c);

    mb = new JMenuBar();
    options = new JMenu("Options");
    mb.add(options);
    this.setJMenuBar(mb);

    this.add(panel);
    this.pack();
    this.setVisible(true);

}



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

1
只要权重为零,它就永远不会填充单元格。权重的整个意义在于告诉GridBagLayout应该将多少额外空间分配给该单元格的内容。 - VGR
1个回答

10

scroller水平和垂直填充框架,而让messageInput只水平填充框架。

您希望在两个方向上填充,因此请设置

c.fill = GridBagConstraints.BOTH; // not HORIZONTAL

接下来的部分是调整权重,它将告诉我们为每个组件分配多少空间(相对地):

    scroller = new JScrollPane(content);
    c.weightx = 0.5;
    c.weighty = 1.0;
    c.gridx = 0;
    c.gridy = 0;
    panel.add(scroller, c);

    messageInput = new JTextField();
    c.weightx = 0.5;
    c.weighty = 0.0;
    c.gridx = 0;
    c.gridy = 1;
    panel.add(messageInput, c);

weightx 应该是一个非零值,以允许组件在水平方向上拉伸。对于编辑器来说,weighty 应该是非零值,而对于文本字段来说则不需要(在这种情况下,您不需要为其设置 c.fill = GridBagConstraints.HORIZONTAL 以防占用额外的垂直空间)。

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接