2016-05-26 10 views
2

私はちょっとした問題があります。2列目のJavaFX選択テキストは、どこの行がクリックされても問題ありません。

たとえば、3つの列テーブルがありますが、最初の列をクリックしますが、毎回2番目の列のテキストが必要です。

これを行う方法はありますか。スイングでは、行と列のインデックスがありましたが、JavaFXではそのようなものは見つかりませんでした。

ダブルクリック選択のための私のコードは次のとおりです。すべての答えを

@Override 
public void handle(MouseEvent click) { 
    if (click.getClickCount() == 2) { 
     @SuppressWarnings("rawtypes") 
     TablePosition pos = searchResult.getSelectionModel().getSelectedCells().get(0); 
     int row = pos.getRow(); 
     int col = pos.getColumn(); 
     @SuppressWarnings("rawtypes") 
     TableColumn column = pos.getTableColumn(); 
     String val = column.getCellData(row).toString(); 
     System.out.println("Selected Value, " + val + ", Column: " + col + ", Row: " + row); 
     try { 
      if (button1.isSelected()) { 
       Runtime.getRuntime().exec("explorer.exe /select," + val); 
      } else { 
       if (button2.isSelected()) { 
        File file = new File(val); 
        Desktop.getDesktop().open(file); 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

おかげであなたを。

答えて

2

あなたが実際にセルに

を選択したい場合は、truecellSelectionEnabledProperty of the selection model of your table viewを設定することができます。

focused cell property of the focus model of your table viewの変更を聞くことができます。

次に、変更リスナーでは、同じ行にある任意のものをTableColumnから選択できます。

例:

// Enable cell selection 
tableView.getSelectionModel().setCellSelectionEnabled(true); 

// On focused property change 
tableView.getFocusModel().focusedCellProperty().addListener(new ChangeListener<TablePosition>() { 

    @Override 
    public void changed(ObservableValue<? extends TablePosition> arg0, TablePosition arg1, TablePosition arg2) { 
     // Select TableColumn "col2" in the same row 
     tableView.getSelectionModel().select(arg2.getRow(), col2); 

    } 
}); 

これは、細胞が一列に選択され、独立して、所望の列のセルを選択し、テーブルビューを生成することになります。行選択の

あなただけのセルの値を取得したい場合は

// Just row selection 
tableView.getSelectionModel().setCellSelectionEnabled(false); 

tableView.getFocusModel().focusedCellProperty().addListener(new ChangeListener<TablePosition>() { 

    @Override 
    public void changed(ObservableValue<? extends TablePosition> arg0, TablePosition arg1, TablePosition arg2) { 
     // Get the data from the desired cell (tableview displays Data objects) 
     Data item = tableView.getItems().get(arg2.getRow()); 
     String data = (String) col2.getCellObservableValue(item).getValue(); 
     System.out.println(data); 
    } 
}); 

この例では、列が選択されている独立して目的の列から値を取得して印刷します。

+0

感謝を –

2

行ファクトリを使用して、テーブルの行をマウスリスナーを登録します。あなたは非常に多くの

TableView<MyDataType> tableView = ... ; 

tableView.setRowFactory(tv -> { 
    TableRow<MyDataType> row = new TableRow<>(); 
    row.setOnMouseClicked(e -> { 
     if (e.getClickCount() == 2) { 
      MyDataType rowData = row.getItem(); 
      if (rowData != null) { 
       // get value displayed in second column from rowData... 
       // and process it however you need 
      } 
     } 
    }); 
    return row ; 
}); 
関連する問題