当TreeItem中的节点获得焦点时,JavaFX会自动选择TreeItem

时间:2014-05-08 16:13:50

标签: nullpointerexception treeview javafx

我有一个TreeView,我已经通过将HBox放入"图形" TreeItem标签。这个HBox包含一个MenuButton。我希望能够自动选择TreeItem,只要将焦点放在其中的MenuButton中 - 这是JavaFX不会自动完成的。但是,当我在TreeView的单元工厂中执行类似的操作时:

menuButton.focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> value, Boolean oldVal, Boolean newVal)
{
    if(newVal.equals(oldVal))
        return;

    if(newVal)
    {
        TreeItem<FormationDataModel> treeItem = getTreeItem();
        System.out.println("Setting selection to " + treeItem + "...");
        treeView.getSelectionModel().select(treeItem);
    }
}});

对菜单按钮的关注通常会导致此异常:

java.lang.NullPointerException
at javafx.scene.Scene$ScenePulseListener.synchronizeSceneProperties(Scene.java:2148)
at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2210)
at com.sun.javafx.tk.Toolkit$5.run(Toolkit.java:363)
at com.sun.javafx.tk.Toolkit$5.run(Toolkit.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:361)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:384)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:463)
at com.sun.javafx.tk.quantum.QuantumToolkit$9.run(QuantumToolkit.java:332)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67)
at java.lang.Thread.run(Thread.java:744)

有没有人知道是什么会导致这个或如何解决它,以便当TreeItem中的节点获得焦点时我可以自动选择TreeItem?

1 个答案:

答案 0 :(得分:2)

对于其他感兴趣的人来说,这可能是JavaFX 2.2中的一个或多个错误,特别是在他们覆盖MultipleSelectionModel的实现以修复OTHER错误的情况下。在这样做的过程中,它们会导致各种问题,因为它们会自动扩展任何所选项目的子项。当你这样做时,许多TreeItems都会失效,导致各种同步破坏。解决方法是按INDEX而不是OBJECT选择项目。这完全没问题。