2017-06-09 4 views
0

これは私の問題です。私はコントローラのinitialize(URL、ResourceBundle)関数に以下のコードを持っています。 setOnMouseClickedは、特定の行をクリックすると正しく呼び出されますが、setOnKeyPressedは呼び出されません。私はここで何が欠けていますか?TableRow setOnKeyPressedを使用していない

tblView.setRowFactory(tv -> { 
    TableRow<Entry> row = new TableRow<Entry>(); 

    row.setOnMouseClicked((MouseEvent e) -> { 
     if ((!row.isEmpty()) && (e.getButton() == MouseButton.PRIMARY) && (e.getClickCount() == 2)) { 
      openEntryEditor(row); 
      e.consume(); 
     } 
    }); 

    row.setOnKeyPressed((KeyEvent e) -> { 
     if ((!row.isEmpty()) && (e.getCode() == KeyCode.ENTER)) { 
      openEntryEditor(row); 
      e.consume(); 
     } 
    }); 

    return row; 
}); 

答えて

2

...テーブルの行ないにこれをフック。これは、フォーカスされたノードのみを意味し、その祖先はイベントを受け取ります。

ただし、クリックする部分に関係なく、常にフォーカスがあるのはTableViewです。したがってTableViewの子孫として追加されたTableRowはイベントを受信しません。

このリスナーをTableViewに登録し、SelectionModelを使用して必要な情報を取得する必要があります。

tableView.setOnKeyPressed((KeyEvent e) -> { 

    if (!tableView.getSelectionModel().isEmpty() 
      && e.getCode() == KeyCode.ENTER) { 

     System.out.println("edit " + tableView.getSelectionModel().getSelectedItem()); 

     e.consume(); 
    } 
}); 
+0

興味深い。私はGui:Pに誤解されました。 TableRowにはフォーカスがあったが、矢印キーをクリックするか、矢印キーで移動したときにハイライト表示されていたためだ。 – user9985

0

通常私はKeyEvent秒間、ターゲットノードが集中Nodeある

tblView.setOnKeyReleased(event -> { 
      if(event.getCode().equals(KeyCode.ENTER) || event.getCode().equals(KeyCode.SPACE)){ 
       if(tblView.getSelectionModel().getSelectedItem() != null) { 
        //Do your stuff 
       } 
      } 
     }); 
関連する問題