Java 网格布局锚

Java 网格布局锚,java,swing,jpanel,layout-manager,gridbaglayout,Java,Swing,Jpanel,Layout Manager,Gridbaglayout,我正在尝试使用锚点来设置组件的对齐方式。 这是我的密码: public void intiConOpt() { /*********************************** connection options ****************************************/ conOptGBC.insets = new Insets(5, 5, 5, 5); conOptGBC.weightx = 1.0; conOptG

我正在尝试使用锚点来设置组件的对齐方式。 这是我的密码:

public void intiConOpt()
{
    /*********************************** connection options ****************************************/
    
    conOptGBC.insets = new Insets(5, 5, 5, 5);
    conOptGBC.weightx = 1.0;
    conOptGBC.weighty = 1.0;
    conOptGBC.anchor = GridBagConstraints.NORTHWEST;
    conOpt = new JPanel();
    conOpt.setLayout(new GridBagLayout());
    
    //////////////////////////////////////////cycle time////////////////////////////////////////////
    
    readPeriodLabel = new JLabel("Node read cycle time:");
    conOptGBC.gridx = 0;
    conOptGBC.gridy = 0;
    conOpt.add(readPeriodLabel, conOptGBC);
    
    readPeriodNumberModel = new SpinnerNumberModel();
    readPeriodSpinner = new JSpinner(readPeriodNumberModel);
    JSpinner.NumberEditor readPeriodEditor = new JSpinner.NumberEditor(readPeriodSpinner,"###");
    readPeriodSpinner.setEditor(readPeriodEditor);
    readPeriodNumberModel.setValue(TopologyMain.settings.getSettingsList().get("nodeReadingCycleTime"));

    readPeriodSpinner.setPreferredSize(new Dimension(40, 20));
    conOptGBC.gridx = 1;
    conOptGBC.gridy = 0;
    conOpt.add(readPeriodSpinner, conOptGBC);
    
    readPeriodLabel2 = new JLabel("<html><font size=2>(4-180 sec)</font></html>");
    conOptGBC.gridx = 2;
    conOptGBC.gridy = 0;
    conOpt.add(readPeriodLabel2, conOptGBC);
    
    ///////////////////////////////////////////time out////////////////////////////////////////////
    
    cliTimeoutLabel = new JLabel("CLI response timeout:");
    conOptGBC.gridx = 0;
    conOptGBC.gridy = 1;
    conOpt.add(cliTimeoutLabel, conOptGBC);
    
    cliTimeoutNumberModel = new SpinnerNumberModel();
    cliTimeoutSpinner = new JSpinner(cliTimeoutNumberModel);
    JSpinner.NumberEditor cliTimeoutEditor = new JSpinner.NumberEditor(cliTimeoutSpinner,"###");
    cliTimeoutSpinner.setEditor(cliTimeoutEditor);
    cliTimeoutNumberModel.setValue(TopologyMain.settings.getSettingsList().get("cliTimeout") /10);

    cliTimeoutSpinner.setPreferredSize(new Dimension(40, 20));
    conOptGBC.gridx = 1;
    conOptGBC.gridy = 1;
    conOpt.add(cliTimeoutSpinner, conOptGBC);
    
    cliTimeoutLabel2 = new JLabel("<html><font size=2>(8-999 sec)</font></html>");
    conOptGBC.gridx = 2;
    conOptGBC.gridy = 1;
    conOpt.add(cliTimeoutLabel2, conOptGBC);
    
    ///////////////////////////////////////busy response//////////////////////////////////////////////
            
    cliBusySleepLabel = new JLabel("CLI busy check time:");
    conOptGBC.gridx = 0;
    conOptGBC.gridy = 2;
    conOpt.add(cliBusySleepLabel, conOptGBC);
    
    cliBusySleepNumberModel = new SpinnerNumberModel();
    cliBusySleepSpinner = new JSpinner(cliBusySleepNumberModel);
    JSpinner.NumberEditor cliBusySleepEditor = new JSpinner.NumberEditor(cliBusySleepSpinner,"###");
    cliBusySleepSpinner.setEditor(cliBusySleepEditor);
    cliBusySleepNumberModel.setValue(TopologyMain.settings.getSettingsList().get("cliBusySleep") /1000);
    
    cliBusySleepSpinner.setPreferredSize(new Dimension(40, 20));
    conOptGBC.gridx = 1;
    conOptGBC.gridy = 2;
    conOpt.add(cliBusySleepSpinner, conOptGBC);
    
    cliBusySleepLabel2 = new JLabel("<html><font size=2>(1-999 sec)</font></html>");
    conOptGBC.gridx = 2;
    conOptGBC.gridy = 2;
    conOpt.add(cliBusySleepLabel2, conOptGBC);
    conOpt.setVisible(false);
    contentPanel.add(conOpt);
}
public void intiConOpt()
{
/***********************************连接选项****************************************/
conOptGBC.insets=新的insets(5,5,5,5);
conOptGBC.weightx=1.0;
conOptGBC.weighty=1.0;
conOptGBC.anchor=GridBagConstraints.NORTHWEST;
conOpt=new JPanel();
conOpt.setLayout(新的GridBagLayout());
//////////////////////////////////////////周期时间////////////////////////////////////////////
readPeriodLabel=新的JLabel(“节点读取周期时间:”);
conOptGBC.gridx=0;
conOptGBC.gridy=0;
添加(readPeriodLabel,conOptGBC);
readPeriodNumberModel=新喷丝头NumberModel();
readPeriodSpinner=新的JSpinner(readPeriodNumberModel);
JSpinner.numberditor readPeriodEditor=新的JSpinner.numberditor(readPeriodSpinner,“####”);
setEditor(readPeriodEditor);
readPeriodNumberModel.setValue(TopologyMain.settings.getSettingsList().get(“nodeReadingCycleTime”);
setPreferredSize(新维度(40,20));
conOptGBC.gridx=1;
conOptGBC.gridy=0;
添加(readPeriodSpinner,conOptGBC);
readPeriodLabel2=新的JLabel(“(4-180秒)”);
conOptGBC.gridx=2;
conOptGBC.gridy=0;
conOpt.add(readPeriodLabel2,conOptGBC);
///////////////////////////////////////////暂停////////////////////////////////////////////
cliTimeoutLabel=newjlabel(“CLI响应超时:”);
conOptGBC.gridx=0;
conOptGBC.gridy=1;
conOpt.add(cliTimeoutLabel,conOptGBC);
cliTimeoutNumberModel=新喷丝头NumberModel();
cliTimeoutSpinner=新的JSpinner(cliTimeoutNumberModel);
JSpinner.numberditor cliTimeoutEditor=新的JSpinner.numberditor(cliTimeoutSpinner,“####”);
setEditor(cliTimeoutEditor);
cliTimeoutNumberModel.setValue(TopologyMain.settings.getSettingsList().get(“cliTimeout”)/10);
设置PreferredSize(新维度(40,20));
conOptGBC.gridx=1;
conOptGBC.gridy=1;
conOpt.add(cliTimeoutSpinner,conOptGBC);
cliTimeoutLabel2=新的JLabel(“(8-999秒)”);
conOptGBC.gridx=2;
conOptGBC.gridy=1;
conOpt.add(cliTimeoutLabel2,conOptGBC);
///////////////////////////////////////忙响应//////////////////////////////////////////////
cliBusySleepLabel=新JLabel(“CLI忙检查时间:”);
conOptGBC.gridx=0;
conOptGBC.gridy=2;
conOpt.add(cliBusySleepLabel,conOptGBC);
ClibusySleepNumber模型=新喷丝头编号模型();
cliBusySleepSpinner=newjspinner(cliBusySleepNumberModel);
JSpinner.numberditor cliBusySleepEditor=新的JSpinner.numberditor(cliBusySleepSpinner,“####”);
setEditor(cliBusySleepEditor);
cliBusySleepNumberModel.setValue(TopologyMain.settings.getSettingsList().get(“cliBusySleep”)/1000);
设置PreferredSize(新维度(40,20));
conOptGBC.gridx=1;
conOptGBC.gridy=2;
conOpt.add(cliBusySleepSpinner,conOptGBC);
cliBusySleepLabel2=新的JLabel(((1-999秒));
conOptGBC.gridx=2;
conOptGBC.gridy=2;
conOpt.add(cliBusySleepLabel2,conOptGBC);
conOpt.setVisible(假);
contentPanel.add(conOpt);
}

我的问题是GridBagConstraints锚无效,我的组件仍在面板的中心。

锚属性工作正常,您遇到的问题是

conOptGBC.weightx = 1.0;
conOptGBC.weighty = 1.0;
问题是,您已经要求<代码> GridBagLayout <代码>为每个列分配相等的空间,因此它们将占用,在这种情况下,每个都是第三个,这是要考虑的。

通过删除
conOptGBC.weightx=1.0你得到

这有点难看,但如果我们在中添加一些指南


您可以看到字段开始与西北方向对齐…

锚定属性工作正常,您遇到的问题是

conOptGBC.weightx = 1.0;
conOptGBC.weighty = 1.0;
问题是,您已经要求<代码> GridBagLayout <代码>为每个列分配相等的空间,因此它们将占用,在这种情况下,每个都是第三个,这是要考虑的。

通过删除
conOptGBC.weightx=1.0你得到

这有点难看,但如果我们在中添加一些指南


您可以看到字段开始与西北方向对齐…

锚定属性工作正常,您遇到的问题是

conOptGBC.weightx = 1.0;
conOptGBC.weighty = 1.0;
问题是,您已经要求<代码> GridBagLayout <代码>为每个列分配相等的空间,因此它们将占用,在这种情况下,每个都是第三个,这是要考虑的。

通过删除
conOptGBC.weightx=1.0你得到

这有点难看,但如果我们在中添加一些指南


您可以看到字段开始与西北方向对齐…

锚定属性工作正常,您遇到的问题是

conOptGBC.weightx = 1.0;
conOptGBC.weighty = 1.0;
问题是,您已经要求<代码> GridBagLayout <代码>为每个列分配相等的空间,因此它们将占用,在这种情况下,每个都是第三个,这是要考虑的。

通过删除
conOptGBC.weightx=1.0你得到

这有点难看,但如果我们在中添加一些指南


您可以看到字段开始与西北方向对齐…

您要么错误地解释了可视化结果,要么看到了一些依赖于外部组件状态的内容,而我们无法从代码片段中推断出这些内容。你能发布一个截图(以及你没有想到的部分的文字描述)吗?我已经编辑了这篇文章并添加了一个截图链接。我能看到的唯一区别是