总体而言,您的方法听起来不错-只要有效,您就已经实现了主要目标!所以我在这里的评论更多是关于微调/更广泛的设计方面。
如果在程序执行期间 GUI 不会随后发生变化,那么在构造函数中进行GUI 构造基本上没有错。这里的基本原理是,应为“一次性”建设活动保留建设者。因此,对于具有预定布局的对话框等可能没问题。
如果您有一个更加动态的 GUI,其中组件在整个程序执行过程中经常被添加和删除,那么我强烈建议将其移至构造函数之外的一组方法,以便可以独立于对象构造来调用它们。如果需要进行初始设置,构造函数本身仍然可以调用这些方法,但随后您可以稍后调用这些方法来添加新组件、刷新布局等。
好消息是,如果你弄错了这些东西并不难重构——如果需要,稍后将设置代码从构造函数中提取到单独的方法中通常是微不足道的。
要注意的另一件事是经常重复的口头禅“更喜欢组合而不是继承”。也就是说,如果您可以通过组装现有组件而不是继承和覆盖您的设计来使您的 GUI 工作,那么从长远来看,您的设计可能会更好/更容易维护。例如,我认为我从未对 JFrame 进行子类化——在其中添加包含所有应用程序特定组件的 JPanel 几乎总是更简洁。
最后,小心不要将您的 GUI 组件与您的应用程序逻辑耦合得太紧密。Swing 实际上在鼓励您将数据模型与表示代码分离方面做得很好(例如,使用ListModel 和朋友)。值得研究和理解这种方法。关键是您通常应该以与应用程序完全无关的方式构建 GUI 组件,但通过将它们连接到正确的数据模型和事件处理程序等来赋予它们特定于应用程序的行为。