您的方法总体上听起来不错-只要可行,就可以实现主要目标!因此,我在这里的评论更多是关于微调/更广泛的设计方面.
只要在程序执行期间GUI随后不会发生变化,在构造函数中进行GUI构造就从根本上没有错.这里的理由是,应将构造函数保留给“一次性”构造活动.因此,对于具有预先确定的布局的对话框之类的对话框可能很好.
如果您有一个更加动态的GUI,在整个程序执行过程中经常添加和删除组件,那么我强烈建议将其移至构造函数外部的一组方法,以便可以独立于对象构造来调用它们.如果需要进行初始设置,构造函数本身仍可以调用这些方法,但是随后您可以稍后调用这些方法以添加新组件,刷新布局等.
好消息是,如果您弄错了,这些东西就不难重构-如果需要的话,将安装程序代码从构造函数中拉出到单独的方法中通常很简单.
要注意的另一件事是经常重复的口头禅“宁愿作文优先于继承”.就是说,如果您可以通过组装现有组件而不是继承和覆盖您的设计来使GUI工作,从长远来看可能会更好/更容易维护.例如,我认为我从来没有继承过JFrame的子类-只是在其中添加包含所有特定于应用程序的组件的JPanels几乎总是更干净.
最后,请谨慎将GUI组件与应用程序逻辑紧密耦合.实际上,Swing可以很好地使您从展示代码中分离出数据模型(例如,使用ListModel and friends).值得研究和理解这种方法.关键是,您通常应该以与应用程序无关的方式来构建GUI组件,但应通过将它们连接到正确的数据模型和事件处理程序等来为它们提供应用程序特定的行为.