2016-10-06 8 views
1

私はTableViewを生成し、次のコードを持って、のJavaFXのtableViewのナビゲーション

public class NavExample extends Application { 

    private final TableView<Person> table = new TableView<>(); 
    private final ObservableList<Person> data 
      = FXCollections.observableArrayList(new Person("Z", "X"), new Person("A", "B")); 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) { 
     Scene scene = new Scene(new Group()); 
     stage.setWidth(450); 
     stage.setHeight(550); 

     TableColumn firstNameCol = new TableColumn("First Name"); 
     firstNameCol.setMinWidth(100); 
     firstNameCol.setCellValueFactory(
       new PropertyValueFactory<>("firstName")); 

     TableColumn lastNameCol = new TableColumn("Last Name"); 
     lastNameCol.setMinWidth(100); 
     lastNameCol.setCellValueFactory(
       new PropertyValueFactory<>("lastName")); 

     table.getSelectionModel().setCellSelectionEnabled(true); 
     table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 
     table.setItems(data); 
     table.getColumns().addAll(firstNameCol, lastNameCol); 

     table.getSelectionModel().selectFirst(); 
     table.getFocusModel().focus(table.getSelectionModel().getSelectedIndex()); 

     final VBox vbox = new VBox(); 
     vbox.setSpacing(5); 
     vbox.setPadding(new Insets(10, 0, 0, 10)); 
     vbox.getChildren().addAll(table); 

     ((Group) scene.getRoot()).getChildren().addAll(vbox); 

     stage.setScene(scene); 
     stage.show(); 
    } 

    public static class Person { 

     private final SimpleStringProperty firstName; 
     private final SimpleStringProperty lastName; 

     private Person(String fName, String lName) { 
      this.firstName = new SimpleStringProperty(fName); 
      this.lastName = new SimpleStringProperty(lName); 
     } 

     public String getFirstName() { 
      return firstName.get(); 
     } 

     public void setFirstName(String fName) { 
      firstName.set(fName); 
     } 

     public String getLastName() { 
      return lastName.get(); 
     } 

     public void setLastName(String fName) { 
      lastName.set(fName); 
     } 
    } 
} 

アプリケーションが起動したら、私は、使用してデフォルトで

table.getSelectionModel().selectFirst(); 

を最初の行を選択しています、

tableの中から選択するまでは、ナビゲーション(UPキーとDOWNキー)は機能しません。 cus table.getFocusModel().focus(table.getSelectionModel().getSelectedIndex());

また、「DownまたはUP」をクリックすると行が選択された場合、次の行のセル が選択される代わりに、行の選択が保持されません。

どうすればこの問題を解決できますか?

答えて

1

簡単な解決策は、テーブル自体にフォーカスを要求するだろう、ない特定の行/セル:あなたはセル選択モードを使用する場合は

table.requestFocus(); 
+0

ありがとうございます、これは焦点の問題を解決しました。移動中に行選択を保持することはできますか?(行選択は保持されません) – user3164187

+0

@ user3164187セル選択を有効にしたため、できません。 –

1

は、あなたがそう、セルではない行を集中する必要がありますフォーカスするにはTableColumnを指定する必要があります。

// table.getFocusModel().focus(table.getSelectionModel().getSelectedIndex()); 
table.getFocusModel().focus(table.getSelectionModel().getSelectedIndex(), table.getColumns().get(0)); 
関連する問題