gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:05:46 24 4
gpt4 key购买 nike

我有一个关于实现使用自定义类作为其属性之一的 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 中,效果很好!但我确实需要让用户直接在一个编辑器中配置这些成员,因为该编辑器还提供了一个测试器来测试这些设置等。

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

提前非常感谢您!

最佳答案

我发现我的自定义属性和 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());
}

当然应该有一些空指针检查等等。但这基本上就是如何告诉 Matisse 如何初始化您的自定义类!

关于java - 具有自定义类属性的 Netbeans 自定义组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20760389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com