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

时间:2012-09-10 15:00:59

标签: java eclipse java-ee eclipse-indigo windowbuilder

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

详细

Window builder有一个内置的代码生成器/代码分析器,可以从“图形表单设计器”生成GUI代码,反之亦然。快速设计GUI并了解各种框架如何在java中工作(特别是对于Java初学者)非常有用。但是,当我转向更复杂的GUI设置时,我在设计中使用生成的代码时遇到了问题。问题是大多数生成的代码都放在initialize()方法中,这使得对象驻留在本地范围内,很难从“外部”获取引用。

到目前为止,我已经将initialize()方法中的类型声明复制/粘贴到类主体中手动作为公共访问它们,但这似乎是错误的方法。只要我不从图形设计器中重新组织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()的本地范围“捕获”参考文献?

1 个答案:

答案 0 :(得分:2)

在“首选项”窗口中,展开WindowBuilder和Swing(或SWT),然后展开“代码生成”。可以选择在本地声明变量,作为类级别字段,并且可以懒惰地初始化。您还可以选择平面或块语句。有are some examples in the documentation under WindowBuilder Pro User Guide > Preferences > Swing要查找的内容。