2017-06-19 30 views
0

我不明白为什么我不能让一个监听器里我的对象的正确的价值观。我创建了一个类型为“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()”等为空的时刻,虽然应该有相同的名称。

我知道如何创建一个解决方法,但只是不知道是否有人知道为什么听众看不到这些字段。

+0

凡定义plantName?它必须是Plant类的一个属性。方法getGridId()和getDescription()也缺失。 – Aubin

+0

'plantName'和'id'的值从不设置。 – Poohl

+0

大概你不会在你调用'setName()'的同一'Plant'实例上调用'getName()'。 (您还没有显示任何地方,你叫'的setName()',更不用说足以能够告诉为什么发生这种情况。创建一个[MCVE]。) –

回答

0

在工厂类,没有什么实际被分配实际上你需要设置的变量。

class Plant { 
String plantName; 
int id; 
public String getName() { 
    return plantName; 
} 
public void setName(String plantName1) { 
    plantName = plantName1; 
} 
public int gridId() { 
    return gridId; 
} 
public void setId(int id1) { 
    id = id1; 
} 
} 
+0

对不起,我错过了将代码放在这里的时候。变量存在,我编辑了代码来显示 –