【发布时间】:2017-11-22 02:54:18
【问题描述】:
我无法理解为什么我无法在侦听器中获取对象的正确值。我创建了一个实例变量“植物”,它是“植物”的类型。然后在我的一种方法中,我创建了一个 Plant 对象并将其分配给“植物变量”。然后我设置了植物对象的一些字段,比如“name”和“id”。一切正常,但是...我创建了一个侦听器以在单击按钮后打开一个新窗口。对我来说奇怪的是,在这个监听器中,程序看不到我之前设置的植物对象字段。 这是我的代码:
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 类的片段,其中设置了 Plant 对象的字段:
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()”等为空的时刻,虽然应该有相同的名称。
我知道如何创建解决方法,但想知道是否有人知道为什么侦听器看不到这些字段。
【问题讨论】:
-
植物名称在哪里定义?它必须是 Plant 类的属性。方法 getGridId() 和 getDescription() 也丢失了。
-
从未设置
plantName和id的值。 -
大概您没有在调用
setName()的同一个Plant实例上调用getName()。 (你甚至没有在任何地方显示你调用setName()的地方,更不用说能够说明为什么会发生这种情况。创建一个minimal reproducible example。) -
抱歉,我编辑了这些空白,所以现在应该清楚了。我在同一个 Plant 实例上调用 getName() ,这就是为什么它对我来说如此奇怪。当我通过方法参数传递植物引用时,它可以工作,但如果它是全局实例,则不是。
标签: java sqlite javafx listener