Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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在JPanel中对齐组件中心?_Java_Swing_Gridbaglayout - Fatal编程技术网

Java 如何使用GridBagLayout在JPanel中对齐组件中心?

Java 如何使用GridBagLayout在JPanel中对齐组件中心?,java,swing,gridbaglayout,Java,Swing,Gridbaglayout,当我尝试对齐我的组件时,它会向左或向右移动 所以我只想解决这个问题,并告诉我如何设置面板的大小为400 x 350像素 这是我的代码……标题标签和结果标签应该在中间对齐 public TimeGui() { layout = new GridBagLayout(); setSize(400, 350); //**Its not working** setBackground(Color.LIGHT_GRAY); setBorder(BorderFactory

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

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

这是我的代码……
标题标签
结果标签
应该在中间对齐

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);
}
}
public TimeGui(){
布局=新的GridBagLayout();
设置大小(400350);//**它不工作**
立根背景(颜色:浅灰色);
setboorder(BorderFactory.createLineBorder(Color.BLACK));
设置顺序(新标题边框(新蚀刻边框(),“时间转换”);
设置布局(布局);
layoutConstraints=新的GridBagConstraints();
textField1=新的JTextField(10);
textField2=新的JTextField(10);
字符串[]名称1={“秒”、“分钟”、“小时”、“天”、“周”};
comboBox1=新的JComboBox(名称1);
comboBox2=新的JComboBox(名称1);
标题标签=新的JLabel(“时间转换单位”,JLabel.CENTER);
结果标签=新的JLabel(“结果标签”);
equalLabel=新的JLabel(“=”);
convertButton=新的JButton(“转换”);
layoutConstraints.fill=GridBagConstraints.HORIZONTAL;
插图插图=新插图(10,10,10,10);
layoutConstraints.anchor=GridBagConstraints.CENTER;
addComponent(标题标签,0,0,2,2,插图);//我尝试了(0,1,2,2)
addComponent(组合框1,3,0,2,3,插图);
addComponent(组合框2,3,2,2,3,插图);
addComponent(文本字段1,6,0,1,2,插图);
添加组件(相等标签,6,1,1,2,插图);
addComponent(文本字段2、6、2、1、2,插图);
addComponent(结果标签,8,1,2,1,插图);
添加组件(转换按钮,10,0,2,2,插图);
}
私有void addComponent(组件组件,int行,
整数列、整数宽度、整数高度、插图1){
layoutConstraints.gridx=列;
layoutConstraints.gridy=行;
layoutConstraints.gridwidth=宽度;
layoutConstraints.gridheight=高度;
layoutConstraints.insets=inset1;
layout.setConstraints(组件、layoutConstraints);
添加(组件);
}
}

问题在于您的
网格宽度
填充
属性

基本上我所改变的是

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);
你可以和其他几个人一起玩

至于定义面板的实际大小,最好是覆盖
TimeGui
getPreferredSize
方法

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

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

在没有图像的情况下,如果您至少可以提供一个值,那么您至少可以在不添加任何内容的情况下运行它。只需将您的图像上传到任何网站,如,或。任何具有更高权限的人都会将其添加到您的问题中好的,请告诉我如何设置面板的大小。这取决于您使用的布局管理器来显示它。首先覆盖
getPreferredSize
,如我的回答底部所述。我仍然在努力设置组件大小。我为Jpanel编写了getPreferredSize方法,但无法为组件编写。我该如何解决这个问题。。。