我在rootpane的左边有一个vbox,在rootpane的右边有一个vbox。 leftvobx有3个textarea节点,rightvbox有一个colorpicker; 我想:当我在leftvbox上选择一个textarea节点,然后点击rightvbox上的colorpicker时,当前的textarea不会丢失焦点。
我的想法与“场景构建器”相同,当我们在工作区中选择一个音符,然后处理右滑动功能区域(如更改颜色,设置大小和字体)时,音符不会失去焦点,所以action知道工作区中的哪个节点需要处理。
代码: VBox leftBox = new VBox(); VBox rightBox = new VBox();
15px
答案 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();
});
我实际上没有测试过代码。