具有自定义类属性的Netbeans自定义组件

时间:2013-12-24 11:49:39

标签: java swing netbeans properties custom-component

我有一个关于实现Swing控件的问题,该控件使用自定义类作为其属性之一。我的目标是在netbeans IDE中使用此控件,并在设计时将其配置为与任何其他组件一样。我已经为我的 ConnectionInfo 对象实现了一个自定义属性编辑器,它可以正常工作。

然而 - 当我在Netbeans中配置我的 IntLEDs ConnectionInfo 属性并保存它时,我可以在Netbeans生成的代码中看到它在启动我的 ConnectionInfo 上课。

这实际上是Netbeans IDE生成的内容:

intLED1.setConnection(???);

所以我猜Netbeans不知道如何实例化我的 ConnectionInfo 类。 但是如何告诉Netbeans该怎么做呢? :)

此代码基本上是我的组件的剥离版本

public class IntLED extends JPanel {

  private ConnectionInfo connection = new ConnectionInfo("", 11159, "", "", Variable.VARIABLE_TYPE.INT);

  public IntLED() {
      initComponents();

      PropertyEditorManager.registerEditor(ConnectionInfo.class, PviCpuPropertyEditor.class);
  }

  public ConnectionInfo getConnection() {
      return connection;
  }

  public void setConnection(ConnectionInfo connection) {
      this.connection = connection;
  }
}

这里是 ConnectionInfo 代码。只是一些成员和Getters / Setters。

public class ConnectionInfo {
  private String pviHost = "";
  private int    pviPort = 11159;
  private String pviTask = "";
  private String pviVarname = "";
  private Variable.VARIABLE_TYPE pviType;

  public ConnectionInfo() {
  }

  public ConnectionInfo(String pviHost, int pviPort, String pviTask, String pviVarname, Variable.VARIABLE_TYPE type) {
      this.pviHost = pviHost;
      this.pviPort = pviPort;
      this.pviTask = pviTask;
      this.pviVarname = pviVarname;
      this.pviType = type;
  }



  public String getPviHost() {
      return pviHost;
  }

  public void setPviHost(String pviHost) {
      this.pviHost = pviHost;
  }

  public int getPviPort() {
      return pviPort;
  }

  public void setPviPort(int pviPort) {
      this.pviPort = pviPort;
  }

  public String getPviTask() {
      return pviTask;
  }

  public void setPviTask(String pviTask) {
      this.pviTask = pviTask;
  }

  public String getPviVarname() {
      return pviVarname;
  }

  public void setPviVarname(String pviVarname) {
      this.pviVarname = pviVarname;
  }

  public Variable.VARIABLE_TYPE getPviType() {
      return pviType;
  }

  public void setPviVarname(Variable.VARIABLE_TYPE pviType) {
      this.pviType = pviType;
  }
}

我还尝试将 ConnectionInfo -Class的成员直接放入我的 IntLED -Class,这样可以正常工作!但我真的需要让用户直接在一个编辑器中配置这些成员,因为编辑器还提供了一个测试器来测试这些设置等等。

我希望有人能指出我正确的方向:)

非常感谢你!

2 个答案:

答案 0 :(得分:2)

我在自定义属性和Matisse代码生成器之间找到了'缺失的链接'!

在我的自定义属性编辑器(扩展PropertyEditorSupport)中,我做了覆盖方法getJavaInitializationString()。 显然,当这个方法没有被覆盖时,它会返回'???'这正是我所看到的。

以下是我修复它的方法:

@Override
public String getJavaInitializationString() {
    return String.format("new ConnectionInfo(\"%s\", %d, \"%s\", \"%s\", Variable.VariableType.BOOLEAN)", getValue().getHost(), getValue().getPort(), getValue().getTask(), getValue().getVarname()); 
}

当然应该有一些Nullpointer检查等等。但这基本上是如何告诉马蒂斯如何初始化你的自定义类!

答案 1 :(得分:0)

我希望我能理解您的问题,但在我看来,您希望能够将自定义JPanelIntLED)添加为可在GUI编辑器中使用的组件(马蒂斯)像其他所有组件一样?

这里有一个答案(https://stackoverflow.com/a/18409887/963076),解释了如何将自定义组件添加到GUI编辑器。

编辑:

好的,我明白了。要更改Netbeans生成的代码,您应该在该组件的Properties对话框中查找该参数。右键单击该组件,然后单击“属性”。然后在属性列表中找到connection。应显示connection,因为Netbeans会查找所有get()set()方法,并将其添加为您可以编辑的属性。找到connection后,按右侧的...按钮。它会弹出一个对话框,允许您设置该组件的属性。您可能需要选择“自定义代码”。

(在下面的图片中,我使用了columnModel属性作为插图)。

enter image description here

从下面的屏幕中选择“自定义代码”。

enter image description here