各ノードに親(親もコンポーネントコード)があるデータベース(コード、コンポネント、親)上にテーブルがあり、selectから動的にtreeViewを入力する必要がありますデータベースから動的にjavaFX treeViewを塗りつぶす
@FXML
private TreeView tree;//declaration of the treeView
HashMap<Integer, composant> node = new HashMap<>(); //for child nodes
HashMap<Integer, composant> pere = new HashMap<>(); //for parent nodes
composant c; //object from component class
private void fillTree(String idSys) {
String query = "SELECT * FROM composant WHERE id=?";
try {
ps = cnx.prepareStatement(query);
ps.setString(1, idSys);
rs = ps.executeQuery();
while (rs.next()) {
int code = rs.getInt("code");
String composant = rs.getString("composant");
int parent = rs.getInt("parent");
String niveau = rs.getString("niveau");
int id = rs.getInt("id");
c = new composant(code, composant, niveau, parent, id);
node.put(code, c);
pere.put(parent, c);
}
ps.close();
rs.close();
} catch (Exception e) {
System.err.println("Error" + e);
}
TreeItem<String> system = new TreeItem<>(sys);
//brows and fill parents node
for (Integer k : pere.keySet()) {
composant p = pere.get(k);
TreeItem<String> parent = new TreeItem<>();
parent.setValue(p.getComposant());
//brows and fill child hashmap
for (Integer i : node.keySet()) {
composant c = node.get(i);
TreeItem<String> noeud = new TreeItem<>();
noeud.setValue(c.getComposant());
if (c.getParent() == k) {
//if the parent = 1 it must attach to the root node
if (k == 1) {
system.getChildren().add(noeud);
} else {
parent.getChildren().add(noeud);
}
}
}
}
tree.setRoot(system);
}
何をコンパイルしていない、これは私は、ツリー構造を作成するためのロジックが間違っている、ほぼ確信して
ツリー構造を構築するアルゴリズムが正しいかどうかはわかりませんが、* nothing *がGUIに表示されている場合は、投稿していないものが間違っています。 (少なくとも、ルートノードが表示されるはずです。)[MCVE]を作成することをお勧めします。データベースにアクセスする代わりに、いくつかの 'composant'インスタンスをハードコードし、それらをマップに入れます。ごく少数のコード行でこれを実行できるはずです。それが動作しない場合は、あなたの質問に完全な例を投稿することができます。そうであれば、問題がどこにあるかを絞り込むことができます。 –