Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javafx中按字母顺序在按键上选择节点_Java_Javafx_Javafx 2_Javafx 8 - Fatal编程技术网

在javafx中按字母顺序在按键上选择节点

在javafx中按字母顺序在按键上选择节点,java,javafx,javafx-2,javafx-8,Java,Javafx,Javafx 2,Javafx 8,如图所示,有20个切换按钮。我想按字母顺序更改按键的焦点遍历。如果我按键盘上的V键,它将选择第一次出现(VVS1),如果第二次它将选择第二次出现(VVS2)。我得到了答案 @FXML private AnchorPane acnCalc; @FXML private ToggleGroup grpClarity; @FXML private ToggleButton tglIf, tglVvs1, tglvvs2, tglVs1, tglVs2,

如图所示,有20个切换按钮。我想按字母顺序更改按键的焦点遍历。如果我按键盘上的V键,它将选择第一次出现(VVS1),如果第二次它将选择第二次出现(VVS2)。

我得到了答案

@FXML
    private AnchorPane acnCalc;
    @FXML
    private ToggleGroup grpClarity;
    @FXML
        private ToggleButton tglIf, tglVvs1, tglvvs2, tglVs1, tglVs2, tglSi1, tglSi2, tglSi22, tglSi3, tglSi32, tglI1,
                tglI12, tglI2, tglI22, tglI3, tglI4, tglI5, tglI6, tglI7, tglI8;
我已经使用场景生成器将“切换组”设置为“所有切换按钮”

public void initialize(URL location, ResourceBundle resources) {
        HashMap<String, ToggleButton> lstCalc = new HashMap<>();
        for (Toggle t : grpClarity.getToggles()) {
            ToggleButton chk = (ToggleButton) t;
            lstCalc.put(chk.getText(), chk);
        }
        acnCalc.setOnKeyPressed(new EventHandler<KeyEvent>() {
                @Override
                public void handle(KeyEvent ke) {
                 if (ke.getCode().equals(KeyCode.I)) {
                      if (lstCalc.get("If").isFocused()) {
                          lstCalc.get("I1").requestFocus();
                      } else if (lstCalc.get("I1").isFocused()) {
                         lstCalc.get("I1-").requestFocus();
                     } else if (lstCalc.get("I1-").isFocused()) {
                         lstCalc.get("I2").requestFocus();
                     } else if (lstCalc.get("I2").isFocused()) {
                         lstCalc.get("I2-").requestFocus();
                     } else if (lstCalc.get("I2-").isFocused()) {
                         lstCalc.get("I3").requestFocus();
                     } else if (lstCalc.get("I3").isFocused()) {
                         lstCalc.get("I4").requestFocus();
                     } else if (lstCalc.get("I4").isFocused()) {
                         lstCalc.get("I5").requestFocus();
                     } else if (lstCalc.get("I5").isFocused()) {
                         lstCalc.get("I6").requestFocus();
                     } else if (lstCalc.get("I6").isFocused()) {
                         lstCalc.get("I7").requestFocus();
                     } else if (lstCalc.get("I7").isFocused()) {
                         lstCalc.get("I8").requestFocus();
                     } 
                     else {
                         lstCalc.get("If").requestFocus();
                     }
               }
               if (ke.getCode().equals(KeyCode.S)) {
                     if (lstCalc.get("SI1").isFocused()) {
                         lstCalc.get("SI2").requestFocus();
                     } else if (lstCalc.get("SI2").isFocused()) {
                         lstCalc.get("SI2-").requestFocus();
                     } else if (lstCalc.get("SI2-").isFocused()) {
                         lstCalc.get("SI3").requestFocus();
                     } else if (lstCalc.get("SI3").isFocused()) {
                         lstCalc.get("SI3-").requestFocus();
                     }
                     else {
                         lstCalc.get("SI1").requestFocus();
                     }
               }
               if (ke.getCode().equals(KeyCode.V)) {
                     if (lstCalc.get("VVS1").isFocused()) {
                         lstCalc.get("VVS2").requestFocus();
                     } else if (lstCalc.get("VVS2").isFocused()) {
                         lstCalc.get("VS1").requestFocus();
                     } else if (lstCalc.get("VS1").isFocused()) {
                         lstCalc.get("VS2").requestFocus();
                     } 
                     else {
                         lstCalc.get("VVS1").requestFocus();
                     }
               }
           }
     }
}
public void初始化(URL位置,ResourceBundle资源){
HashMap lstCalc=新HashMap();
for(切换t:grpClarity.getToggles()){
ToggleButton chk=(ToggleButton)t;
lstCalc.put(chk.getText(),chk);
}
acnCalc.setOnKeyPressed(新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent ke){
if(ke.getCode().equals(KeyCode.I)){
if(lstCalc.get(“if”).isFocused()){
lstCalc.get(“I1”).requestFocus();
}else if(lstCalc.get(“I1”).isFocused()){
lstCalc.get(“I1-”).requestFocus();
}else if(lstCalc.get(“I1-”).isFocused()){
lstCalc.get(“I2”).requestFocus();
}else if(lstCalc.get(“I2”).isFocused()){
lstCalc.get(“I2-”).requestFocus();
}else if(lstCalc.get(“I2-”).isFocused()){
lstCalc.get(“I3”).requestFocus();
}else if(lstCalc.get(“I3”).isFocused()){
lstCalc.get(“I4”).requestFocus();
}else if(lstCalc.get(“I4”).isFocused()){
lstCalc.get(“I5”).requestFocus();
}else if(lstCalc.get(“I5”).isFocused()){
lstCalc.get(“I6”).requestFocus();
}else if(lstCalc.get(“I6”).isFocused()){
lstCalc.get(“I7”).requestFocus();
}else if(lstCalc.get(“I7”).isFocused()){
lstCalc.get(“I8”).requestFocus();
} 
否则{
lstCalc.get(“If”).requestFocus();
}
}
if(ke.getCode().equals(KeyCode.S)){
if(lstCalc.get(“SI1”).isFocused()){
lstCalc.get(“SI2”).requestFocus();
}else if(lstCalc.get(“SI2”).isFocused()){
lstCalc.get(“SI2-”).requestFocus();
}else if(lstCalc.get(“SI2-”).isFocused()){
lstCalc.get(“SI3”).requestFocus();
}else if(lstCalc.get(“SI3”).isFocused()){
lstCalc.get(“SI3-”).requestFocus();
}
否则{
lstCalc.get(“SI1”).requestFocus();
}
}
if(ke.getCode().equals(KeyCode.V)){
if(lstCalc.get(“VVS1”).isFocused()){
lstCalc.get(“VVS2”).requestFocus();
}else if(lstCalc.get(“VVS2”).isFocused()){
lstCalc.get(“VS1”).requestFocus();
}else if(lstCalc.get(“VS1”).isFocused()){
lstCalc.get(“VS2”).requestFocus();
} 
否则{
lstCalc.get(“VVS1”).requestFocus();
}
}
}
}
}

迭代切换,如果找到包含适当文本的切换,则将所选切换更改为该节点:

private static Node[] fromStrings(ToggleGroup group, String... strings) {
    Node[] result = new Node[strings.length];

    for (int i = 0; i < strings.length; i++) {
        ToggleButton button = new ToggleButton(strings[i]);
        button.setPrefSize(100, 50);
        button.setTextAlignment(TextAlignment.CENTER);
        button.setToggleGroup(group);
        result[i] = button;
    }

    return result;
}

@Override
public void start(Stage primaryStage) {
    GridPane root = new GridPane();
    final ToggleGroup group = new ToggleGroup();
    root.addRow(0, fromStrings(group, "If", "VVS1", "VVS2", "VS1", "VS2", "SI1", "SI2", "SI2-", "SI3", "SI3-"));
    root.addRow(1, fromStrings(group, "I1", "I1-", "I2", "I2-", "I3", "I4", "I5", "I6", "I7", "I8"));

    root.setFocusTraversable(true);
    root.setOnKeyTyped(new EventHandler<KeyEvent>() {

        @Override
        public void handle(KeyEvent event) {
            String s = event.getCharacter().toUpperCase();
            // move focus to the next matching element
            if (s.length() == 1) {
                event.consume();
                List<Toggle> toggles = group.getToggles();
                int selectedIndex = toggles.indexOf(group.getSelectedToggle());
                int size = toggles.size();

                // search next matching node starting directly after the
                // selected position
                for (int i = selectedIndex + 1; i < size; i++) {
                    Toggle l = toggles.get(i);
                    if (((Labeled)l).getText().toUpperCase().startsWith(s)) {
                        group.selectToggle(l);
                        return;
                    }
                }
                for (int i = 0; i < selectedIndex; i++) {
                    Toggle l = toggles.get(i);
                    if (((Labeled)l).getText().toUpperCase().startsWith(s)) {
                        group.selectToggle(l);
                        return;
                    }
                }
            }
        }
    });

    Scene scene = new Scene(root);
    root.requestFocus();

    primaryStage.setScene(scene);
    primaryStage.show();
}
private static Node[]fromStrings(ToggleGroup组,String…strings){
节点[]结果=新节点[strings.length];
for(int i=0;i