单击其他节点时,javafx不会丢失焦点

时间:2017-09-12 15:24:15

标签: java javafx

我在rootpane的左边有一个vbox,在rootpane的右边有一个vbox。 leftvobx有3个textarea节点,rightvbox有一个colorpicker; 我想:当我在leftvbox上选择一个textarea节点,然后点击rightvbox上的colorpicker时,当前的textarea不会丢失焦点。

我的想法与“场景构建器”相同,当我们在工作区中选择一个音符,然后处理右滑动功能区域(如更改颜色,设置大小和字体)时,音符不会失去焦点,所以action知道工作区中的哪个节点需要处理。

代码:         VBox leftBox = new VBox();         VBox rightBox = new VBox();

15px

enter image description here

1 个答案:

答案 0 :(得分:0)

没有办法让两个节点聚焦在一起。这将是非常奇怪的,因为每个键盘事件等将转到两个节点。在JavaFX场景构建器中,您也可以尝试它。单击SceneBuilder中的某些内容并按删除,它将被删除。按下SceneBuilder中的某些内容然后在右侧按下删除,并且不会删除您首先选择的项目。因为它实际上没有焦点。 SceneBuilder只显示您上次选择的内容。

解决您的问题。我会创建一个新的变量Button lastFocused;并在其他按钮focusedProperty上创建一个像这样的监听器:

btn2.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
    if(!newValue) lastFocused = btn2;
});

一旦失去焦点,这应该将Button存储在新变量中。当您聚焦颜色选择器时它失去焦点,变量将具有选择颜色选择器时选择的Button。

现在在颜色选择器中这样的东西应该可以工作:

colorpicker.setOnAction(e->{
    lastFocused.setText("color changed.");
    lastFocused.requestFocus();
});

我实际上没有测试过代码。