Ho un TableView di sola lettura in JavaFX 8 e non desidero che gli utenti selezionino le righe.
Dovrebbero essere ancora in grado di ordinare le colonne e scorrere, basta non selezionare alcuna riga.
Come posso ottenere questo risultato?Disabilita selezione riga in TableView
risposta
Dopo un po 'ho trovato come risolverlo in modo da postarlo qui per i futuri utenti.
La soluzione si basa su questa risposta: JavaFX8 - Remove highlighting of selected row
Dopo aver aggiunto le seguenti righe al CSS, le linee selezionate appariranno linee esattamente come non selezionati, ottenendo lo stesso effetto che volevo nello stesso posto:
.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 ;
}
Ho appena colpito questo problema me stesso. Penso che il modo migliore per risolverlo sia fornire un'implementazione nulla di TableViewSelectionModel.
allora si può semplicemente dire implementazione nullo tableView.setSelectionModel(new NullTableViewSelectionModel(tableView));
Un campione è al di sotto ...
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() {
}
}
'isEmpty()' dovrebbe restituire true IMHO. – Mordechai
ho trovato here un'altra soluzione per lo stesso problema, ma per un ListView. Il modello è: ascolta l'evento di modifica della selezione, quindi deseleziona la selezione. Funziona anche per il TableView. Esempio di codice:
_tableView.getSelectionModel()
.selectedIndexProperty()
.addListener((observable, oldvalue, newValue) -> {
Platform.runLater(() -> {
_tableView.getSelectionModel().clearSelection();
});
});
È possibile disattivare la selezione, impostando selectionModel
a null
.
table.setSelectionModel(null);
Non si interrompe anche l'ordinamento nella tabella? – namlik
L'ordinamento ha funzionato correttamente. – user3224416
Gira per me con ListView con JavaFX 8, in che modo disabilitare la selezione? –
tecnicamente, è possibile annullare la selezioneModello - potrebbe disattivare la navigazione, anche se (non può provare in questo momento). Inoltre, la copia non sarebbe possibile. Curioso: perché vuoi detistorre l'esperienza utente? – kleopatra
@kleopatra L'impostazione di SelectionModel su null genererà eccezioni quando l'utente ordina le colonne. – BioRoy
buono a sapersi, grazie per le informazioni :-) Mi sembra un bug (null selectionModel è un valore valido), quindi ho archiviato un problema: https://javafx-jira.kenai.com/browse/RT-39624 – kleopatra