다음 JavAFX를 빌드 중이며 완전히 익숙합니다. 모양은 다음과 같습니다JavaFX : 선택한 TreeItem의 요소에 TreeArea 바인딩 (TreeView에 포함)
http://i.imgur.com/nfzQzIY.png
왼쪽뿐만 아니라 중앙에 일부 TextArea
들에 TreeView
거기에 볼 수 있듯이. 나머지는 무시하십시오.
public class PlugTreeItem<T> extends TreeItem{
private Plug plugItem = null;
//########################### PROCS ########################################
public PlugTreeItem(Object t, Plug pl) {
super(t);
plugItem = pl;
}
public PlugTreeItem(Object t, Node node, Plug pl) {
super(t, node);
plugItem = pl;
}
public void setPlugItem(Plug plugItem) {
this.plugItem = plugItem;
}
public Plug getPlugItem() {
return plugItem;
}
}
그리고 TreeView
에 의해 만들어집니다 : 왼쪽 TreeView
에
영숫자 문자열은 내가 지금처럼 Plug
항목에 대한 추가 홀더를 TreeItem를 확장하도록 구축 한 PlugTreeItem
클래스 객체이다 참고 : (더미로, 초기에 생성 된) 트리의 루트 노드로, 그 중 우리가 TreeView
를 만드는 것이 추가 한 후 PlugTreeItem
에 플러그를 연결, PlugTreeItem
객체를 생성하여 SQL DB 떨어져 Plug
의 읽기을 결과 _set는 SQL 결과 행렬을 포함합니다. MAC은 스크린 샷의 왼쪽에 표시되는 주소가 포함 된 입력란입니다.
treeItemRoot = new PlugTreeItem<>("Active Plugs", new Plug()); //Root of the tree, contains a dummy Plug object.
selectedTreeItem = treeItemRoot; //Holder of our currently selected TreeItem, see Listener below.
TreeView<String> treeView = new TreeView<>(treeItemRoot);
while(result_set.next()){
Plug pl = null;
pl = new Plug(result_set.getString("SIHUid"), result_set.getString("sensorID"), result_set.getString("Location"), result_set.getString("Appliance"), result_set.getString("Type"), result_set.getString("connection"));
PlugTreeItem<String> pti = new PlugTreeItem(pl.getMAC(),pl);
treeItemRoot.getChildren().add(pti);
}
마지막으로, 앱의 스크린 샷에서 볼 수있는 것처럼 일부 TextAreas가 있습니다. 그 사람들이 선택한 PlugTreeItem
의 요소를 TreeView
에 반영하기를 원합니다. 왼쪽에서 볼 수있는 값과 동일한 값을 반영하려는 Plug MAC TextArea로 시작해 보겠습니다.
그래서 사용자가 TreeItem
에 클릭 할 때마다의 selectedTreeItem
가 업데이트되는 것을 selectedTreeItem
에 다음 리스너를 추가 한 및 특정 PlugTreeItem
에 대한 참조 원하는 분야
treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
selectedTreeItem = (PlugTreeItem<String>) newValue;
System.out.println("Selection plug MAC: " + selectedTreeItem.getPlugItem().getMAC()); //MARKER: REMOVE
// do what ever you want
}
});
을 희망이 내가 무슨 생각을 않는다 그것은. System.out
명령은 트리에서 다른 항목을 클릭 할 때마다 내가 클릭 한 MAC 주소가 인쇄되는 것을 확인합니다.
어떻게하면 TextAreas에 "이봐 요, selectedTreeItem을 청취하십시오. 변경 될 때마다 특정 값을 가져 와서 텍스트로 설정할 수 있습니까?"
Plug
의 특정 필드에 두 번째 수신기를 추가하려고 시도했습니다. 문자열에서 StringProperty
으로 변경되어 ObservableValue
이됩니다. 그러나 TextArea의 textProperty를 StringProperty로 바인딩 한 후에도 내용은 변경되지 않습니다.
크기 때문에 내 질문에 잘못 말했을 수 있습니다. 추가 정보 나 코드가 누락되었거나 귀하가 모순이라고 생각하면 언제든지 물어보십시오.
"이런 질문을합니다."... TreeItem을 TextArea에 바인딩하는 것이 합리적입니까? 대부분의 경우 두 모델을 기본 모델 값에 바인딩하는 것이 더 바람직하다고 생각합니다. 이 Q/A가 잘못되었다는 말은 아니지만 IMHO를 통해 최적의 디자인이 될 가능성은 희박합니다. – Joel