当前位置: 首页 > 知识库问答 >
问题:

JavaFX:将TextArea绑定到选定TreeItem的元素(包含在TreeView中)

危卜鹰
2023-03-14
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;
    }
}
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);
}
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 
            }
        });

共有1个答案

温峻熙
2023-03-14
package treebind;

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class TreeBind extends Application {

    @Override
    public void start(Stage primaryStage) {

        TreeItem<Plug> treeItemRoot = new TreeItem<>(new Plug("root","a"));
        TreeView<Plug> treeView = new TreeView<>(treeItemRoot);
        for (int i=0;i<10;i++)
            treeItemRoot.getChildren().add(new TreeItem<>(new Plug("name"+String.valueOf(i),"")));
        treeView.setMinWidth(150);

        final TextArea ta1 = new TextArea();

        treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
            @Override
            public void changed(ObservableValue observable, Object oldValue, Object newValue) {
                if (oldValue!=null){
                    ((TreeItem<Plug>)oldValue).getValue().s1.unbindBidirectional(ta1.textProperty());
                    ta1.clear();
                }
                if (newValue!=null){
                    ta1.setText(((TreeItem<Plug>)newValue).getValue().s1.getValue());
                    ((TreeItem<Plug>)newValue).getValue().s1.bindBidirectional(ta1.textProperty());
                }
            }
        });

        HBox root = new HBox();
        root.getChildren().addAll(treeView,ta1);
        Scene scene = new Scene(root, 400, 300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private class Plug{
        public final StringProperty name, s1;

        Plug(String name, String s1){
            this.name = new SimpleStringProperty(name);
            this.s1 = new SimpleStringProperty(s1);
        }
        @Override
        public String toString(){
            return name.getValue();
        }
    }
}
 类似资料:
  • 我试图找到一种简单的方法来链接下载类型的树视图到相同类型的可观察列表。 主控制器。JAVA Download.java 如何实现按对象删除(下载)机制,是否有更简单的方法将observablelist的项绑定到treeview?

  • 我不希望GUI代码(即JavaFX类)出现在我的域对象中。 我需要编写一个适配器类来将我的域对象转换为JavaFX树吗?然后将侦听器添加到树中,并将更改映射回域对象?还是有更好的办法?

  • 我正在尝试这里提供的解决方案https://social.msdn.microsoft.com/forums/en-us/16a91381-0714-4ba1-aff0-7f3b6483b282/populate-a-treeview-from-xsd-file-in-wpf?forum=wpf只采用xs:element和xs:sequence节点,排除所有其他节点(xs:complextype>

  • 本文向大家介绍aurelia 绑定到选择元素,包括了aurelia 绑定到选择元素的使用技巧和注意事项,需要的朋友参考一下 示例 字符串数组 在选择下拉列表中选择一个值并提供字符串数组时,所选值将作为字符串绑定到选择元素的value属性,我们可以使用字符串插值显示该字符串。 对象数组 与上面的示例不同,当提供对象数组时,在下拉列表中选择一个值时,绑定到该特定选项的模型就是所提供的对象。      

  • 问题内容: 我想将select元素绑定到对象列表-这很容易: 在这种情况下,似乎是一个数字-所选项目的ID。 但是,我实际上想绑定到country对象本身,所以它是对象,而不仅仅是id。我试图像这样更改选项的值: 但这似乎不起作用。它似乎在我的对象中放置了一个对象,但是没有放置我期望的对象。您可以在我的Plunker示例中看到这一点。 我还尝试绑定到change事件,以便可以根据所选的id自己设置

  • 必须添加。下面是我的代码: