JavaFXでtableView.getSelectionModel().setCellSelectionEnabled(true);
を使わずにTableViewでTableCellをスタイルする方法はありますか?setCellSelectionEnabledを使わずにフォーカスを当ててTableCellスタイルを変更する
私は、このソリューションhttps://community.oracle.com/thread/3528543?start=0&tstart=0を試してみましたが、それはランダムに行に
元強調するために失敗します。
tableView.getSelectionModel().setCellSelectionEnabled(true);
final ObservableSet<Integer> selectedRowIndexes = FXCollections.observableSet();
final PseudoClass selectedRowPseudoClass = PseudoClass.getPseudoClass("selected-row");
tableView.getSelectionModel().getSelectedCells().addListener((Change<? extends TablePosition> change) -> {
selectedRowIndexes.clear();
tableView.getSelectionModel().getSelectedCells().stream().map(TablePosition::getRow).forEach(row -> {
selectedRowIndexes.add(row);
});
});
tableView.setRowFactory(tableView -> {
final TableRow<List<StringProperty>> row = new TableRow<>();
BooleanBinding selectedRow = Bindings.createBooleanBinding(() ->
selectedRowIndexes.contains(row.getIndex()), row.indexProperty(), selectedRowIndexes);
selectedRow.addListener((observable, oldValue, newValue) -> {
row.pseudoClassStateChanged(selectedRowPseudoClass, newValue);
}
);
return row;
});
を使用して可能です。スタイルを常に 'TableCell'に適用したいのですか、あるいは行が選択されたときだけですか? –
行が選択されているとき。私は通常、tableView.getFocusModel()。getFocusedCell()でセルの位置を取得しますが、スタイルクラスを適用するためにTableCellオブジェクトを取得できないため、スタイルを設定することはできません。 – gadelkareem
'TableRow'が選択されたときに、' TableCell'をフォーカスさせることなく 'TableCell'を' TableRow'でスタイルしたいと思っていますか? –