5

摘要:我正在寻找一种方法来配置 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()某种方式将引用“钓”出本地范围?

4

1 回答 1

2

在 Preferences 窗口中,展开 WindowBuilder 和 Swing(或 SWT),然后展开 Code Generation。有一些选项可以在本地声明变量,作为类级别的字段,并延迟初始化。您还可以选择平面或块语句。WindowBuilder Pro User Guide > Preferences > Swing 下的文档中有一些示例,说明要查找的内容。

于 2012-09-11T13:23:16.627 回答