JavaFX: Vinculando TextArea ao elemento do TreeItem selecionado (contido no TreeView)
Estou criando o seguinte JavAFX e sou bastante novo nele. Aqui está o que parece:
http://i.imgur.com/nfzQzIY.png
Como você pode ver, há umaTreeView
à esquerda, bem como algunsTextArea
s no centro. Por favor, ignore o resto.
As seqüências alfanuméricas à esquerdaTreeView
estãoPlugTreeItem
objetos de classe, que eu criei para estender o TreeItem e ter um suporte adicional para umPlug
item, assim:
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;
}
}
E aTreeView
é construído lendoPlug
s fora de um banco de dados SQL, criandoPlugTreeItem
objetos, vinculando o plugue aoPlugTreeItem
adicionando-o ao nó raiz da árvore (que foi criado inicialmente como um manequim), do qual fazemos oTreeView
: NOTA: result_set contém a matriz de resultados SQL. MAC é o campo que contém os endereços que você vê à esquerda da captura de tela.
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);
}
Finalmente, eu tenho alguns TextAreas, como você vê na captura de tela do aplicativo. Eu quero que eles reflitam os elementos do selecionadoPlugTreeItem
noTreeView
, vamos começar com o Plug MAC TextArea que quero refletir o mesmo valor que você vê à esquerda.
Adicionei o seguinte ouvinte aselectedTreeItem
para que toda vez que o usuário clique em umTreeItem
, aselectedTreeItem
é atualizado e mantém uma referência a esse específicoPlugTreeItem
:
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
}
});
Espero que isso faça o que eu acho que é. oSystem.out
O comando confirma que sempre que eu clico em itens diferentes da árvore, o endereço MAC em que clico é impresso.
Como posso dizer aos meus TextAreas para "ei, ouça o itemTreeItem. Sempre que ele muda, obtenha um valor específico e defina-o como seu texto"?
Tentei adicionar um segundo ouvinte em um campo específico dePlug
que eu mudei de String paraStringProperty
para que se torne umObservableValue
. No entanto, mesmo depois de vincular o textProperty do TextArea ao StringProperty, ele não altera seu conteúdo.
Sei que posso ter formulado minha pergunta incorretamente devido ao seu tamanho. Por favor, não hesite em me pedir qualquer informação ou código adicional que eu possa ter omitido ou que você considere importante.