[英]Buttons doesn't fill all available space when I use GridBagLayout in Java
[英]GridBagLayout doesn't fill all the space
我有一个面板,用作卡片布局的一部分。 该面板使用GridBagLayout
。 我向其中添加了两个组件:填充设置为 BOTH 的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.weighty
...
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=new Insets(5, 5, 5, 5);
如果你想从顶部/左侧/底部/右侧留出一些空间。
快照:
@Braj 有 GridBagLayout 的答案——使用重量约束,他的答案是 1+,但我认为如果你使用 BorderLayout,将你的 JTextArea 放在 JScrollPane 中,放置 JScrollPane BorderLayout,你的设置会更好。 CENTER 和 JTextField BorderLayout.SOUTH(也称为 BorderLayout.PAGE_END)。
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.