控制对Eclipse Window Builder创建的GUI对象的引用的放置位置



摘要:我正在寻找一种方法来配置Eclipse Window Builder的代码生成器,以便将其对象引用放置在类主体中,而不是本地放置在initalize()方法中。

详细

窗口生成器有一个内置的代码生成器/代码分析器,可以从"图形表单设计器"生成GUI代码,反之亦然。快速设计GUI并学习各种框架在java中的工作方式(尤其是对于java初学者)非常有用。然而,当我转向更复杂的GUI设置时,我在设计中使用生成的代码时遇到了问题。问题是,大多数生成的代码都被放置在initialize()方法中,这使得对象驻留在本地作用域中,很难从"外部"获得引用。

到目前为止,我一直在将initialize()方法中的类型声明手动复制/粘贴到类主体作为public,以访问它们,但这似乎是错误的方法。只要我不在图形设计器中重新组织GUI,它就可以正常工作。在这种情况下,代码生成器将其类型声明再次放在initialize()方法中。

自动生成的代码如下所示:

   // AUTO-GENERATED CODE
   public class MyGUI {
      private void initialize() {
          // gui objects declared AND created in this scope by Window Builder
          JFrame frame = new JFrame();
          JPanel panel_1 = new JPanel();
          frame.getContentPane().add(panel_1);
    }
  }

我想要的是:

   public class MyGUI {
          // accessible from outside
          public Frame frame = null;
          public JPanel panel_1 = null;
       private void initialize() {
          // gui objects only created in this scope
          frame = new JFrame();
          panel_1 = new JPanel();
          frame.getContentPane().add(panel_1);
    }
  }

我一直在文档中寻找解决方案(这方面的文档很少),也研究了各种Window Builder偏好,但到目前为止运气不佳。有"数据绑定",但它似乎实现了MVC(将gui元素绑定到模型上),这太过分了。

是否有我缺少的设计模式,或者我应该以某种方式将引用从initialize()的本地范围中"打捞"出来?

在"首选项"窗口中,展开WindowBuilder和Swing(或SWT),然后展开"代码生成"。有一些选项可以在本地将变量声明为类级字段,并延迟初始化。您也可以选择平面语句或块语句。文档中的WindowBuilder Pro用户指南>首选项>Swing中有一些关于查找内容的示例。

最新更新