リスナー内でオブジェクトの適切な値を取得できない理由を理解できません。私はインスタンス変数 "plant"を作成しました。これは "Plant"のタイプです。次に私のメソッドの1つでは、Plantオブジェクトを作成し、それを「プラント変数」に割り当てました。それから私は植物オブジェクトのいくつかのフィールドを "名前"と "ID"のように設定しました。すべて正常に動作しますが...ボタンをクリックした後に新しいウィンドウを開くリスナーを作成しました。そして私にとっては奇妙なことですが、このリスナーの中には、私が以前に設定したプラントオブジェクトフィールドは見えません。リスナーとインスタンス変数のスコープ[javafx]
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 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クラスのフラグメントである:
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;
}
}
次のコードは、工場オブジェクトのフィールドがsettedされGrowboxModelクラスの断片を提示: はここに私のコードです
今のところすべてが素晴らしかったです。プログラムは、植物オブジェクトのフィールド。しかし、問題は以下の通りです。
"plant.getName()"などがnullの場合は、同じ名前である必要があります。
私は回避策を作成する方法を知っていますが、なぜリスナーがこれらのフィールドを見ることができないのか誰かが知っているかどうかは分かりません。
ここで、plantNameが定義されていますか?これはPlantクラスの属性でなければなりません。メソッドgetGridId()およびgetDescription()も欠落しています。 – Aubin
'plantName'と' id'の値は決して設定されません。 – Poohl
おそらく、あなたは 'setName()'を呼び出した同じ 'Plant'インスタンスで' getName() 'を呼び出さないでしょう。 (あなたは 'setName()'と呼んでいない場所でも、なぜこれが起こっているのかを伝えることはできません)[MCVE]を作成してください。 –