Exception 简单JavaFXEventHandler引发异常

Exception 简单JavaFXEventHandler引发异常,exception,event-handling,treeview,javafx,Exception,Event Handling,Treeview,Javafx,以以下示例13-3“实施单元工厂”为例: 然后添加行 box.addEventHandler(EventType.ROOT, new EventHandler<Event>() { @Override public void handle(Event event) { System.out.println("event "+event); } }); 这是一个错误还是我做错了什么 完整示例代码(您需要在同一目录中包含文件“root.png”和“de

以以下示例13-3“实施单元工厂”为例: 然后添加行

box.addEventHandler(EventType.ROOT, new EventHandler<Event>() {
@Override
    public void handle(Event event) {
         System.out.println("event "+event);
    }
});
这是一个错误还是我做错了什么

完整示例代码(您需要在同一目录中包含文件“root.png”和“department.png”):

封装测试;
导入java.util.*;
导入javafx.application.*;
导入javafx.beans.property.*;
导入javafx.event.*;
导入javafx.scene.*;
导入javafx.scene.control.*;
导入javafx.scene.image.*;
导入javafx.scene.input.*;
导入javafx.scene.layout.*;
导入javafx.scene.paint.*;
导入javafx.stage.*;
导入javafx.util.*;
公共类TreeViewSample扩展了应用程序{
专用最终节点根图标=
新图像视图(新图像(getClass().getResourceAsStream(“root.png”));
私有最终图像depIcon=
新图像(getClass().getResourceAsStream(“department.png”);
List employees=Arrays.asList(
新员工(“Ethan Williams”,“销售部”),
新员工(“Emma Jones”,“销售部”),
新员工(“迈克尔·布朗”,“销售部”),
新员工(“安娜·布莱克”、“销售部”),
新员工(“Rodger York”、“销售部”),
新员工(“Susan Collins”,“销售部”),
新员工(“Mike Graham”、“IT支持”),
新员工(“Judy Mayer”、“IT支持”),
新员工(“Gregory Smith”、“IT支持”),
新员工(“Jacob Smith”,“会计部”),
新员工(“伊莎贝拉·约翰逊”,“会计部”);
TreeItem根节点=
新TreeItem(“MyCompany人力资源”,根图标);
公共静态void main(字符串[]args){
应用程序启动(args);
}
@凌驾
公众假期开始(阶段){
setExpanded(true);
用于(员工:员工){
TreeItem empLeaf=newtreeitem(employee.getName(),newimageview(depIcon));
布尔值=false;
for(TreeItem depNode:rootNode.getChildren()){
if(depNode.getValue().contentEquals(employee.getDepartment())){
depNode.getChildren().add(empLeaf);
发现=真;
打破
}
}
如果(!找到){
TreeItem depNode=新TreeItem(
employee.getDepartment(),
新建图像视图(depIcon)
);
rootNode.getChildren().add(depNode);
depNode.getChildren().add(empLeaf);
}
}
stage.setTitle(“树视图示例”);
VBox box=新的VBox();
最终场景=新场景(框,400,300);
场景。设置填充(颜色。浅灰色);
TreeView TreeView=新的TreeView(rootNode);
treeView.setEditable(true);
setCellFactory(新回调(){
@凌驾
公共TreeCell呼叫(TreeView p){
返回新的TextFieldTreeCellImpl();
}
});
box.getChildren().add(treeView);
舞台场景;
stage.show();
addEventHandler(EventType.ROOT,新的EventHandler()){
@凌驾
公共无效句柄(事件){
System.out.println(“事件”+事件);
}
});
}
私有最终类TextFieldTreeCellImpl扩展了TreeCell{
私有文本字段文本字段;
公共文本字段treecellimpl(){
}
@凌驾
公开作废已启动IT(){
super.startEdit();
if(textField==null){
createTextField();
}
setText(空);
设置图形(文本字段);
textField.selectAll();
}
@凌驾
公共作废取消编辑(){
super.cancelEdit();
setText((字符串)getItem());
setGraphic(getTreeItem().getGraphic());
System.out.println(“项目取消”+getItem());
}
@凌驾
public void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
if(空){
setText(空);
设置图形(空);
}否则{
if(isEditing()){
if(textField!=null){
setText(getString());
}
setText(空);
设置图形(文本字段);
}否则{
setText(getString());
setGraphic(getTreeItem().getGraphic());
}
}
}
私有void createTextField(){
textField=newtextfield(getString());
setOnKeyReleased(新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent t){
if(t.getCode()==KeyCode.ENTER){
committedit(textField.getText());
}else if(t.getCode()==KeyCode.ESCAPE){
取消编辑();
}
}
});
}
私有字符串getString(){
返回getItem()==null?”:getItem().toString();
}
}
公共静态类雇员{
私有最终SimpleStringProperty名称;
私人物业署;
私人员工(字符串名称、字符串部门){
this.name=新的SimpleStringProperty(名称);
this.department=新SimpleStringProperty(部门);
}
公共字符串getName(){
返回name.get();
}
public void setName(字符串fName){
name.set(fName);
}
公共部门(){
返回部门。get();
}
公共部门(字符串fName){
部门设置(fName);
}
}

}他们的代码确实有点问题。 您可以通过删除以下行来避免此异常:

    box.addEventHandler(EventType.ROOT, new EventHandler<Event>() {
         @Override
         public void handle(Event event) {
                System.out.println("event "+event);
         }
    });

他们的代码确实有点问题。 您可以通过删除以下行来避免此异常:

    box.addEventHandler(EventType.ROOT, new EventHandler<Event>() {
         @Override
         public void handle(Event event) {
                System.out.println("event "+event);
         }
    });
    box.addEventHandler(EventType.ROOT, new EventHandler<Event>() {
         @Override
         public void handle(Event event) {
                System.out.println("event "+event);
         }
    });
    box.addEventHandler(InputEvent.ANY , new EventHandler<InputEvent>()