Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GridBagLayout不';不要填满所有的空间_Java_Swing_Layout Manager_Gridbaglayout - Fatal编程技术网

Java GridBagLayout不';不要填满所有的空间

Java GridBagLayout不';不要填满所有的空间,java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,我有一个面板,作为卡片布局的一部分。面板使用GridBagLayout。我向它添加了两个组件:JTextArea和JTextField填充设置为水平。它们只占据了水平空间 // Chat card setup JPanel chatCard = new JPanel(new GridBagLayout()); gc = new GridBagConstraints(); gc.gridx = 0; gc.gridy

我有一个面板,作为卡片布局的一部分。面板使用
GridBagLayout
。我向它添加了两个组件:
JTextArea
JTextField
填充设置为水平。它们只占据了水平空间

        // Chat card setup
        JPanel chatCard = new JPanel(new GridBagLayout());
        gc = new GridBagConstraints();

        gc.gridx = 0;
        gc.gridy = 0;
        gc.fill = GridBagConstraints.BOTH;
        gc.weightx = 2;
        chatArea = new JTextArea();
        chatCard.add(chatArea,gc);

        gc.gridx = 0;
        gc.gridy = 1;
        gc.fill = GridBagConstraints.HORIZONTAL;
        gc.anchor = GridBagConstraints.PAGE_END;
        gc.weightx = 2;
        JTextField msgField = new JTextField();
        msgField.setActionCommand("SendText");
        msgField.addActionListener(listener);
        chatCard.add(msgField, gc);
现在看起来是这样的


尝试使用
gc.weight

     ...
    gc.weightx = 2;
    gc.weighty=1;
    chatArea = new JTextArea();

    ...
    JScrollPane scrollPane=new JScrollPane(chatArea);
    chatCard.add(scrollPane,gc);
    ...

    ...
    gc.weightx = 2;
    gc.weighty=0;
    JTextField msgField = new JTextField();
    ...
JScrollPane
中添加
JTextArea
,否则当行大于其高度时,将得到意外结果。

使用
gc.insets=新的insets(5,5,5,5)如果需要从上/左/下/右留出一些空间。

快照:


@Braj有GridBagLayout的答案——使用权重约束,对他的答案使用1+,但我认为如果您使用BorderLayout,将JTextArea放置在JScrollPane中,将JScrollPane BorderLayout.CENTER和JTextField BorderLayout.SOUTH(也称为BorderLayout.PAGE_END)放置,您的设置会更好


你的预期产出是多少?请分享。我以为JTextArea会占据所有的空间,而TextField只不过是底部的一个小条(它的大小还可以)。有趣的是,你的代码并没有完全满足我的需要。还有一些未使用的区域。我将JTextArea weighty设置为1,将JTextFields设置为0。现在似乎没事了。是的,你可以改变它。我只是给你一个暗示。对一个聪明的人来说,一个暗示就足够了。:)我以前做过。但我不认为这可能是导致问题的原因。我再补充一句:)祝贺你,我今天的最后一票已经用完了,我很高兴。晚安,非常感谢。我在向你们学习,你们可能是对的。。。今天我对使用GridBagLayout太着迷了,以至于忘记了更基本的功能one@Bebras:但同样,braj正确回答了您的实际问题。他的答案是1+。
  JPanel chatCard = new JPanel(new BorderLayout(5, 5));
  int rows = 20;
  int cols = 40;
  JTextArea chatArea = new JTextArea(rows, cols);
  chatCard.add(new JScrollPane(chatArea), BorderLayout.CENTER);

  JTextField msgField = new JTextField(cols);
  msgField.setActionCommand("SendText");
  // msgField.addActionListener(listener);
  chatCard.add(msgField, BorderLayout.PAGE_END);