Java 网格布局和大小调整
对GridBagLayout有点困惑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
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边框布局中——我不确定这在代码中会是什么样子,所以如果有人能告诉我如果是这样的话,我将不胜感激
因此,问题是:
(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列
。