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);