我有两个类来查看和控制模型中的两个对象。视图/控件类是JPanels。 其中一个对象包含一个设备,另一个保存该设备的配置。 我正在初始化负责视图/控制配置的类,然后我初始化设备的视图/控件,在构造函数中传递配置。 问题是当配置对象(在包含它的JPanel内部)中更改配置时,它也必须在设备对象中更改。我想传递配置的引用而不是对象的值,但我知道这在java中是不可能的。有没有相同的东西,还是我必须让听众?如果是这样,我应该使用什么来收听相应JPanel中配置对象所做的更改?
编辑: 这些是变量:
private viewControl.JConfiguracoesParametros jConfiguracoesParametros1;
private viewControl.JEnsaiosDeCampo jEnsaiosDeCampo1;
这就是我初始化它们的方式:
jConfiguracoesParametros1 = new viewControl.JConfiguracoesParametros();
jEnsaiosDeCampo1 = new viewControl.JEnsaiosDeCampo(jConfiguracoesParametros1.getConfig(), jSelecaoAspersor1.getDadosAspersor(), new PerfisRadiais());
我需要的是jEnsaiosDeCampo1始终具有ConfiguracoesParametros1.getConfig()的值。
就像我现在的方式,如果我尝试使用jEnsaiosDeCampo1
中取决于jConfiguracoesParametros1
的任何内容,我会得到一个NullPointerException,即使我已经在{{1}中创建了配置对象}。
答案 0 :(得分:0)
首先,您应该有一个视图类和一个用于控制器的分隔类
第二个java总是通过引用传递
当您更改配置时,您的jpanel应该通过控制器中的public handleConfigChanged(config)之类的方法通知控制器某些内容已被更改。然后该处理程序将该信息发送给设备并询问是否重新加载它。
public class Device{
...
public void reloadConfig(config){
...
}
}
public class Controller{
...
public boolean handleConfigChanged(config){
...
device.reloadConfig(config);
}
}
public class View{
...
private void changeConfig(config){
...
controller.handleConfigChanged(config);
}
}
答案 1 :(得分:0)
只有那些代码片段,很难确切知道事情应该如何运作。所以我的建议可能没用,但我会尝试:
private viewControl.JConfiguracoesParametros jConfiguracoesParametros1
= new viewControl.JConfiguracoesParametros();
private viewControl.JEnsaiosDeCampo jEnsaiosDeCampo1
= new viewControl.JEnsaiosDeCampo(jConfiguracoesParametros1, jSelecaoAspersor1.getDadosAspersor(), new PerfisRadiais());
您的代码更改是我将整个jConfiguracoesParametros1
对象传递给新的JEnsaiosDeCampo
对象(是田间试验还是什么?)。通过这种方式,JEnsaiosDeCampo
对象引用了相同的配置参数对象,对JEnsaiosDeCampo
对象可以看到对配置的任何后续更改。
坦率地说,当你评论
时,我对你的理解是否正确有疑问对象实际上是通过值传递的,如java中的所有内容。
对象本身未通过。传递对象的引用(按值)。