2016-10-22 182 views
1

enter image description here選擇節點

作爲每圖像有20肘節buttons.I想改變焦點遍歷上按鍵alphabetically.If我是按V從鍵盤然後它將選擇第一次出現( VVS1)如果第二次將選擇第二次出現(VVS2)。

回答

1

迭代通過切換,如果一個被發現含有相應的文本選擇切換更改爲節點:

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(); 
} 
+0

感謝您的回答... 它對我而言... – CTN

0

我得到了答案。

@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(); 
        } 
       } 
      } 
    } 
} 
+0

這是工作太多,但不同類型的邏輯.... – CTN

+1

兩個答案在工作中..! – 2016-10-25 08:29:40