繁体   English   中英

将Swing组件添加到容器的标准方法?

[英]Standard way of adding Swing components to a container?

我已经搜索了一下,但无法真正解决这个问题。

我不确定其他程序员乍看之下是否会完全理解我目前在UI中添加许多组件的策略。 我做了很多Swing工作(主要是针对我的个人应用程序),所以我的过程当然是我惯用的。

本质上,我喜欢创建所有组件(可能不按顺序进行,有时我的想法从一开始就不是100%线性和正确的)。 我可能会也可能不会回去并很好地订购它们。

但是,我确实确保按某种顺序添加它们,这有点让人联想到网页。 几乎总是在创建它们的方法的末尾。

有没有一种标准的方法可以在Swing中向容器添加组件? 我已经看到人们在整个代码中添加了看似随意的组件,并且如果我需要调整组件,有时很难找到。 我尝试使该部分保持集中状态,并以明智的方式将其添加到其容器中。

例:

public void populateMyPanel()
{
    // Create all components
    JPanel wrapperPanel new JPanel(new BorderLayout());

    JPanel panelWest = new JPanel(new FlowLayout());
    JLabel labelOne = new JLabel("Label #1");
    JButton buttonOne = new JButton("Button #1");

    JPanel panelCenter = new JPanel(new FlowLayout());
    JButton buttonTwo = new JButton("Button #2");

    JPanel panelEast = new JPanel(new FlowLayout());
    JTextField myTextField = new JTextField();
    JButton buttonThree = new JButton("Button #3");

    // Now add them in a top-to-bottom & left-to-right order
    wrapperPanel.add(panelWest, BorderLayout.WEST);
      panelWest.add(labelOne);
      panelWest.add(buttonOne);

    wrapperPanel.add(panelCenter, BorderLayout.CENTER);
      panelCenter.add(buttonTwo);

    wrapperPanel.add(panelEast, BorderLayout.EAST);
      panelEast.add(myTextField);
      panelEast.add(buttonThree);
}

对于初学者,请遵循最少惊讶的原则:如果您正在与其他人合作,并且他们已经建立了约定,请使用他们的约定。 我见过的人非常像您给出的示例那样进行编码。 我见过其他人在类的顶部声明但未初始化对象,然后稍后在一种方法中对其进行初始化,然后在另一种方法中将它们添加到面板中。 可能还有三十二种方法来做相同的事情,并且每种方法都有一个有效的论据。

也就是说,可以通过选择最适合该工作的布局管理器来缓解大部分布局对象的麻烦。 自从我尝试过的第一个项目受益匪浅以来,我就一直偏向于使用MigLayout( http://www.miglayout.com/ ),但我承认对于简单的情况来说,这可能会显得过分杀伤力。 看看他们的快速入门指南和Swing演示(展示它可以做什么和执行它的代码),看看它是否对您有意义。

问题是上下文相关的,有时您会以可视顺序创建组件,有时会以需求顺序创建组件(因此,由于某种原因,会首先创建一个视觉上出现在另一个组件之后的组件)。

我唯一能提出的建议就是限制混乱。 如果要创建多个容器,则可能值得创建一个或多个(工厂)负责繁重工作的方法。 这样可以减少混乱,并使UI元素之间的视觉/逻辑连接更容易分离。

如果给定容器的关系很复杂,则最好为它们创建一个单独的类,以便将管理隔离到一个类中。 根据您的需要,这可以是内部类或外部类。 这样可以更轻松地将给定系列组件所需的功能与其他组件的管理隔离开来,这将有助于提高对代码的理解。

基本上,每种情况都没有硬性或快速的规则,您需要决定如何最好地管理它。 就个人而言,我专注于责任和责任领域。 将功能错误隔离到管理卡盘中,因此关系/管理/功能更易于理解(和可更改/可扩展),并在可能的情况下隔离暴露。

也就是说,如果程序的一部分不关心如何收集或管理数据,则它不需要访问执行该功能的组件。 这降低了理解各种组件之间相互关系的复杂性-IMHO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM