代码组织标准

时间:2016-10-30 04:28:41

标签: java

我需要为我的学校作业手动编写所有GUI代码。我正在使用Java并使用GridBagLayout。我读到重用相同的GridBagConstraint实例并且每个组件都拥有它自己的GridBagConstraint实例并不是一个好主意。因此,如果每个组件都有自己的组件,我为每个组件指定填充,位置和插入,这样就可以为GUI创建大量代码。

这个特殊的任务我将在BorderLayout中有一个主窗格,另外两个窗格将位于其中。一个是另一个BorderLayout,它只是输出信息的显示区域,另一个是标签,文本字段和按钮,供用户选择多个用于输入的文件。我已将其分解并将每个窗格的所有代码放在其自己的JComponent实例中(不确定这是否是正确的术语)。所以代码看起来像:

protected JComponent inputPaneComponent() {
    all code for the inputPane goes here
}

但就像我上面描述的那样,使用多个GridBagConstraints,每个组件的细节都会产生一长串代码。我是否应该将每个组件之间的空行分开,或者在每个组件上方放置注释行,说明我正在使用哪个组件?或者只是一大堆线?

这只是我尚未完成编码的一个示例。像这样:

protected JComponent inputPaneComponent() {
    JPanel inputPane = new JPanel();
    inputPane.setLayout(new GridBagLayout());
    inputPane.setBorder(BorderFactory.createTitledBorder("Input Files:"));
    GridBagConstraints c0 = new GridBagConstraints();
    c0.fill = GridBagConstraints.HORIZONTAL;
    c0.gridx = 0;
    c0.gridy = 0;
    c0.insets = new Insets(10, 10, 0, 0);
    inputPane.add(nameLabel, c0);
    GridBagConstraints c1 = new GridBagConstraints();
    c1.fill = GridBagConstraints.HORIZONTAL;
    c1.gridx = 1;
    c1.gridy = 0;
    c1.insets = new Insets(10, 10, 0, 0);
    inputPane.add(nameFileTextField, c1);
    GridBagConstraints c2 = new GridBagConstraints();
    c2.fill = GridBagConstraints.HORIZONTAL;
    c2.gridx = 2;
    c2.gridy = 0;
    c2.insets = new Insets(10, 10, 0, 0);
    inputPane.add(nameFileButton, c2);
    return inputPane;
}

或者这个:

protected JComponent inputPaneComponent() {
    // Set title, layout, and exit condition.
    JPanel inputPane = new JPanel();
    inputPane.setLayout(new GridBagLayout());
    inputPane.setBorder(BorderFactory.createTitledBorder("Input Files:"));

    // Create and configure name label.
    JLabel nameLabel = new JLabel("Names File:");
    GridBagConstraints c0 = new GridBagConstraints();
    c0.fill = GridBagConstraints.HORIZONTAL;
    c0.gridx = 0;
    c0.gridy = 0;
    c0.insets = new Insets(10, 10, 0, 0);
    inputPane.add(nameLabel, c0);

    // Create and configure name file textfield.
    JTextField nameFileTextField = new JTextField(60);
    GridBagConstraints c1 = new GridBagConstraints();
    c1.fill = GridBagConstraints.HORIZONTAL;
    c1.gridx = 1;
    c1.gridy = 0;
    c1.insets = new Insets(10, 10, 0, 0);
    inputPane.add(nameFileTextField, c1);

    // Create and configure name file button.
    JButton nameFileButton = new JButton("Browse");
    GridBagConstraints c2 = new GridBagConstraints();
    c2.fill = GridBagConstraints.HORIZONTAL;
    c2.gridx = 2;
    c2.gridy = 0;
    c2.insets = new Insets(10, 10, 0, 0);
    inputPane.add(nameFileButton, c2);
    return inputPane;
}

我更喜欢后者,对我来说它更容易阅读,但它确实增加了长度,而且我没有经验,并且想知道标准可能是什么。

感谢您的帮助,我希望我能参与此论坛的规则,这是我在这里的第一篇文章。

马特

2 个答案:

答案 0 :(得分:1)

首先......不,除了使用生成低级布局代码的设计器工具 1 之外,没有标准或事实标准。 (你被告知不要这样做。)

但是,有一些方法可以让你的任务不那么痛苦:

  • GridBagConstraint对象在合并到GridBagLayout时被克隆。这意味着您可以重用相同的GridBagConstraint对象,对其进行增量更改。

  • 有些第三方库为GridBagConstraint个对象提供了“构建器”,旨在使构造更简洁。

阅读此Q& A了解更多信息:

1 - 使用设计器工具的陷阱是您“锁定”使用特定工具。这很好......直到工具供应商停止支持它。另一个问题是,您可能会发现需要为运行时许可支付高昂的费用才能分发/销售您的产品。 (我已经看到一个杀了一个好项目,死了!)

答案 1 :(得分:-1)

我建议你重构你的代码,因为一般来说,冗长的方法是不容易支持/维护的,所以你需要refactor你的冗长方法进一步使用有意义名称的小方法,这样你就可以避免注释以及方法名称变得不言自明,它们变得更易读/可理解。

您可以参考以下方法,我将您的一些代码重构为以下内容:

    private GridBagConstraints populateNameLabel(JLabel nameLabel) {
        //populate the data here and return
    }

    private GridBagConstraints populateTextField(JTextField nameFileTextField) {
        //populate the data here and return
    }

    private GridBagConstraints populateFileButton(JButton nameFileButton) {
        //populate the data here and return
    }

您需要在原始方法中使用这些方法,以便代码更具可支持性/可读性。