gpt4 book ai didi

java - 如何使用 GridBagLayout 对齐 JPanel 中的组件中心?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:30:28 25 4
gpt4 key购买 nike

当我尝试对齐我的组件时,它会向左或向右对齐。

所以我只想解决这个问题,并告诉我如何将面板的大小设置为 400 x 350 像素。

enter image description here

这是我的代码....titleLabelResultLabel 应该居中对齐

public TimeGui() {

layout = new GridBagLayout();
setSize(400, 350); //**Its not working**
setBackground(Color.LIGHT_GRAY);
setBorder(BorderFactory.createLineBorder(Color.BLACK));
setBorder(new TitledBorder(new EtchedBorder(), "Time Conversion") );

setLayout(layout);
layoutConstraints = new GridBagConstraints();
textField1 = new JTextField(10);
textField2 = new JTextField(10);

String[] names1 = {"Seconds", "Minutes", "Hours", "Days", "Weeks"};


comboBox1 = new JComboBox<>(names1);
comboBox2 = new JComboBox<>(names1);

titleLabel = new JLabel("Time Conversion Unit", JLabel.CENTER);
resultLabel = new JLabel("Result Label");
equalLabel = new JLabel("=");

convertButton = new JButton("Convert");


layoutConstraints.fill = GridBagConstraints.HORIZONTAL;
Insets inset = new Insets(10, 10, 10, 10);
layoutConstraints.anchor = GridBagConstraints.CENTER;

addComponent(titleLabel, 0, 0, 2, 2, inset ); // I tried (0,1,2,2)



addComponent(comboBox1, 3, 0, 2, 3, inset);

addComponent(comboBox2, 3, 2, 2, 3, inset);

addComponent(textField1, 6, 0, 1, 2, inset);

addComponent(equalLabel, 6, 1, 1, 2, inset);

addComponent(textField2, 6, 2, 1, 2, inset);

addComponent(resultLabel, 8, 1, 2, 1, inset);

addComponent(convertButton, 10, 0, 2, 2, inset);

}

private void addComponent(Component component, int row,
int column, int width, int height, Insets inset1) {
layoutConstraints.gridx = column;
layoutConstraints.gridy = row;
layoutConstraints.gridwidth = width;
layoutConstraints.gridheight = height;
layoutConstraints.insets = inset1;
layout.setConstraints(component, layoutConstraints);
add(component);
}
}

最佳答案

问题出在您的 gridwidthfill 属性上...

enter image description here enter image description here

基本上我所做的改变是...

addComponent(titleLabel, 0, 0, GridBagConstraints.REMAINDER, 2, inset); // I tried (0,1,2,2) 
addComponent(comboBox1, 3, 0, 1, 3, inset);
addComponent(comboBox2, 3, 2, 1, 3, inset);
addComponent(textField1, 6, 0, 1, 2, inset);
addComponent(equalLabel, 6, 1, 1, 2, inset);
addComponent(textField2, 6, 2, 1, 2, inset);
layoutConstraints.fill = GridBagConstraints.NONE;
addComponent(resultLabel, 8, 0, GridBagConstraints.REMAINDER, 1, inset);
addComponent(convertButton, 10, 0, GridBagConstraints.REMAINDER, 2, inset);

你可以和其他几个一起玩。

至于定义面板的实际大小,你能做的最好的事情就是覆盖 TimeGuigetPreferredSize 方法...

@Override
public Dimension getPreferredSize() {
return new Dimension(400, 350);
}

这将向父容器“建议”您希望布局的大小。请记住,这是一个可选值,布局管理员完全有权忽略它。

关于java - 如何使用 GridBagLayout 对齐 JPanel 中的组件中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17101548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com