Java 使用键盘移动焦点故障
请帮忙。 情境:我们有很多按钮的VBox(我可以通过键盘上的箭头键上下滚动焦点),但它们不适合小表单,所以我需要垂直滚动。我使用滚动窗格-最终一切都变得很好,除了移动焦点。当我按下上/下箭头键时,焦点静止不动,但会影响滚动。 我需要使用ScrollPane禁用按键滚动(仅使用鼠标!),并通过上/下箭头键启用移动焦点。你能帮帮我吗,我怎么做 非常感谢 这是我的密码Java 使用键盘移动焦点故障,java,javafx,scroll,focus,Java,Javafx,Scroll,Focus,请帮忙。 情境:我们有很多按钮的VBox(我可以通过键盘上的箭头键上下滚动焦点),但它们不适合小表单,所以我需要垂直滚动。我使用滚动窗格-最终一切都变得很好,除了移动焦点。当我按下上/下箭头键时,焦点静止不动,但会影响滚动。 我需要使用ScrollPane禁用按键滚动(仅使用鼠标!),并通过上/下箭头键启用移动焦点。你能帮帮我吗,我怎么做 非常感谢 这是我的密码 import javafx.application.Application; import javafx.event.ActionEv
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TestJavaFXScrollPane extends Application {
@Override
public void start(Stage primaryStage) {
Button btn0 = new Button("Btn0");
btn0.setOnKeyPressed((event) -> {
System.out.println("btn.KeyPressed; Code: " + event.getCode());
});
Button btn1 = new Button("Btn1");
Button btn2 = new Button("Btn2");
Button btn3 = new Button("Btn3");
VBox root = new VBox();
root.getChildren().addAll(btn0, btn1, btn2, btn3);
ScrollPane scrollPane = new ScrollPane(root);
scrollPane.setOnKeyPressed(event -> {
//if(event.getCode() == KeyCode.DOWN || event.getCode() == KeyCode.UP)
//event.consume(); // Tried to fix issue, but without result ((
});
Scene scene = new Scene(scrollPane, 100, 80);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我自己找到了解决方案(正确吗?)
类MyEventHandler实现EventHandler{
@凌驾
公共无效句柄(KeyEvent事件){
if(event.getCode()==KeyCode.UP){
对象t0=event.getSource();
如果(!(t0 instanceof按钮))
返回;
((BehaviorSkinBase)((按钮)t0.getSkin()).getBehavior().traversePrevious();
}else if(event.getCode()==KeyCode.DOWN){
对象t0=event.getSource();
如果(!(t0 instanceof按钮))
返回;
((BehaviorSkinBase)((按钮)t0.getSkin()).getBehavior().traverseNext();
}
}
公共静态无效处理(按钮…基站){
if(btns==null&&btns.length==0)返回;
用于(按钮el:BTN){
el.setOnKeyPressed(新MyEventHandler());
}
}
}
class MyEventHandler implements EventHandler<KeyEvent> {
@Override
public void handle(KeyEvent event) {
if(event.getCode() == KeyCode.UP) {
Object t0 = event.getSource();
if (!(t0 instanceof Button))
return;
((BehaviorSkinBase) ((Button)t0).getSkin()).getBehavior().traversePrevious();
} else if(event.getCode() == KeyCode.DOWN) {
Object t0 = event.getSource();
if (!(t0 instanceof Button))
return;
((BehaviorSkinBase) ((Button)t0).getSkin()).getBehavior().traverseNext();
}
}
public static void ProcessBurrons(Button... btns) {
if(btns == null && btns.length == 0) return;
for(Button el : btns) {
el.setOnKeyPressed(new MyEventHandler());
}
}