JavaFX 8に読み取り専用のTableViewがあり、ユーザーに行を選択させたくありません。
行を選択するのではなく、列を並べ替えてスクロールできるはずです。
どうすればこれを達成できますか?
しばらくして、それを解決する方法を見つけたので、将来のユーザーのためにここに投稿してください。
解決策は次の回答に基づいています: JavaFX8-選択した行の強調表示を削除
次の行をcssに追加すると、選択した行は選択されていない行とまったく同じように見え、同じ場所で必要な同じ効果が得られます。
.table-row-cell:filled:selected {
-fx-background: -fx-control-inner-background ;
-fx-background-color: -fx-table-cell-border-color, -fx-background ;
-fx-background-insets: 0, 0 0 1 0 ;
-fx-table-cell-border-color: derive(-fx-color, 5%);
}
.table-row-cell:odd:filled:selected {
-fx-background: -fx-control-inner-background-alt ;
}
selectionModel
をnull
に設定すると、選択を無効にできます。
table.setSelectionModel(null);
私はこの問題に自分でぶつかったところです。それを解決する最善の方法は、TableViewSelectionModelのnull実装を提供することだと思います。
次に、単にtableView.setSelectionModel(new NullTableViewSelectionModel(tableView));
と言うことができます
Null実装のサンプルを以下に示します...
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TablePosition;
import javafx.scene.control.TableView;
public class NullTableViewSelectionModel extends TableView.TableViewSelectionModel {
public NullTableViewSelectionModel(TableView tableView) {
super(tableView);
}
@Override
public ObservableList<TablePosition> getSelectedCells() {
return FXCollections.emptyObservableList();
}
@Override
public void selectLeftCell() {
}
@Override
public void selectRightCell() {
}
@Override
public void selectAboveCell() {
}
@Override
public void selectBelowCell() {
}
@Override
public void clearSelection(int i, TableColumn tableColumn) {
}
@Override
public void clearAndSelect(int i, TableColumn tableColumn) {
}
@Override
public void select(int i, TableColumn tableColumn) {
}
@Override
public boolean isSelected(int i, TableColumn tableColumn) {
return false;
}
@Override
public ObservableList<Integer> getSelectedIndices() {
return FXCollections.emptyObservableList();
}
@Override
public ObservableList getSelectedItems() {
return FXCollections.emptyObservableList();
}
@Override
public void selectIndices(int i, int... ints) {
}
@Override
public void selectAll() {
}
@Override
public void clearAndSelect(int i) {
}
@Override
public void select(int i) {
}
@Override
public void select(Object o) {
}
@Override
public void clearSelection(int i) {
}
@Override
public void clearSelection() {
}
@Override
public boolean isSelected(int i) {
return false;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public void selectPrevious() {
}
@Override
public void selectNext() {
}
@Override
public void selectFirst() {
}
@Override
public void selectLast() {
}
}
私は ここ 同じ問題の別の解決策を見つけましたが、ListViewです。パターンは次のとおりです。選択変更イベントをリッスンしてから、選択をクリアします。 TableViewでも機能します。コード例:
_tableView.getSelectionModel()
.selectedIndexProperty()
.addListener((observable, oldvalue, newValue) -> {
Platform.runLater(() -> {
_tableView.getSelectionModel().clearSelection();
});
});