2017-02-07 5 views
1

ここに、JavaFXでCtrl + Cの組み合わせのアクションを設定するコードを示します。 TextField command_lineに焦点が当てられていると動作しません。どうして?TextFieldのフォーカス中にCTRL + Cが機能しない

public void setCtrlC() { 
    command_line.getScene().getAccelerators().put(new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_ANY), 
      new Runnable() { 
       @Override 
       public void run() { 
        LOGGER.debug("CTRL+C pressed"); 
        try { 
         if (tab_toradex.isSelected()) { 
          bw.write(3); 
          bw.flush(); 
         } 
         if(tab_novatel.isSelected()){ 
          bw2.write(3); 
          bw2.flush(); 
         } 
        } catch (IOException e) { 
         LOGGER.debug("CTRL+C command failed"); 
        } 
       } 
      }); 
} 

ありがとう!これで解決し[OK]を

+0

可能な解決策は、[この質問]に答えに記述されている...のみ動作しますhttp://stackoverflow.com/questions/31732583/pass-context-menu-shortcuts-up-from-editing-control)。シーン/ルートにイベントフィルタを追加するより簡単な解決策があるかどうかはわかりません。 – Itai

+0

Control + C(少なくともWindowsでは)はデフォルトでサポートされています。ユーザーがテキストをコピーしようとするとログに記録しますか?実際にここであなたは新しいスレッドを開始したいですか? Runnableは決して開始されません... – GOXR3PLUS

+0

私は実際にこれについてはわかりませんが、テキストフィールドコントロールには独自のアクセラレータがあり、あなたのものを傍受していると思います。 – Jai

答えて

0

、:のTextFieldがフォーカスされている間、一方

final KeyCombination keyCombinationShiftC = new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_DOWN); 

public void setCtrlC() { 

    command_line.setOnKeyPressed(new EventHandler<KeyEvent>() { 

     @Override 
     public void handle(KeyEvent event) { 
      if (keyCombinationShiftC.match(event)) { 
       LOGGER.debug("CTRL+C pressed"); 

       try { 
        if (tab_toradex.isSelected()) { 
         bw.write(3); 
         bw.flush(); 
        } 
        if(tab_novatel.isSelected()){ 
         bw2.write(3); 
         bw2.flush(); 
        } 
       } catch (IOException e) { 
        LOGGER.debug("CTRL+C command failed"); 
       } 
      } 
     } 
    }); 
} 

、今では(

関連する問題