我不明白为什么我不能让一个监听器里我的对象的正确的价值观。我创建了一个类型为“Plant”的实例变量“plant”。然后在我的一个方法中,我创建了一个Plant对象并将其分配给“工厂变量”。然后我设置了一些植物对象的字段,如“name”和“id”。一切工作正常,但...我创建了一个侦听器,在点击按钮后打开一个新窗口。而对于我来说,在这个监听器中,程序看不到我之前设置的工厂对象字段,这对我来说很奇怪。 这里是我的代码:听众和实例变量的作用域[JavaFX的]
class Plant {
private plantName;
private gridId;
public String getName() {
return plantName;
}
public void setName(String plantName) {
this.plantName = plantName;
}
public int gridId() {
return gridId;
}
public void setGridId(int gridId) {
this.gridId = gridId;
}
}
下面的代码呈现GrowboxModel类的片段,其中植物对象的字段设置好的:
public Plant selectAll(int gridId) throws SQLException {
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
String query = "SELECT * FROM plant WHERE gridId = ?";
Plant plant = new Plant();
try {
preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, gridId);
resultSet = preparedStatement.executeQuery();
while(resultSet.next()) {
plant.setName(resultSet.getString("name"));
plant.setGridId(resultSet.getInt("gridId"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
preparedStatement.close();
resultSet.close();
}
return plant;
}
下面是我growboxController类的片段:
public Plant plant;
public GrowboxModel model = new GrowboxModel();
private void growboxCellContent(VBox plantAreaVbox) {
plant = model.selectAll(Integer.parseInt(plantAreaVbox.getId()));
if (plant.getName() == null) {
plantName.setText("EMPTY " + plantAreaVbox.getId());
} else {
System.out.println("FULL" + plant.getGridId());
}
}
现在一切都很好。该程序的工厂对象的领域。但问题如下:
public void growboxCellBehaviour(VBox plantAreaVbox) {
plantAreaVbox.setOnMouseClicked(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
System.out.println("NAME: " + plant.getName() + ", gridId: " + plant.getGridId());
}
});
}
这是“plant.getName()”等为空的时刻,虽然应该有相同的名称。
我知道如何创建一个解决方法,但只是不知道是否有人知道为什么听众看不到这些字段。
凡定义plantName?它必须是Plant类的一个属性。方法getGridId()和getDescription()也缺失。 – Aubin
'plantName'和'id'的值从不设置。 – Poohl
大概你不会在你调用'setName()'的同一'Plant'实例上调用'getName()'。 (您还没有显示任何地方,你叫'的setName()',更不用说足以能够告诉为什么发生这种情况。创建一个[MCVE]。) –