In meiner JavaFX-Tabelle, wenn ich auf eine Zeile klicke, wird diese Zeile ausgewählt. Wenn ich jetzt zum zweiten Mal auf dieselbe Zeile klicke, die zuvor ausgewählt wurde, möchte ich diese bestimmte Zeile abwählen. Ist es möglich ? Bitte teilen Sie einen Beispielcode mit, falls möglich.So heben Sie die Auswahl einer ausgewählten Tabellenzeile bei einem zweiten Klick/Auswahl in javaFX auf
Antwort
Unten Stück Code für diese Anforderung gearbeitet.
tableView.setRowFactory(new Callback<TableView<Person>, TableRow<Person>>() {
@Override
public TableRow<Person> call(TableView<Person> tableView2) {
final TableRow<Person> row = new TableRow<>();
row.addEventFilter(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
final int index = row.getIndex();
if (index >= 0 && index < tableView.getItems().size() && tableView.getSelectionModel().isSelected(index) ) {
tableView.getSelectionModel().clearSelection();
event.consume();
}
}
});
return row;
}
});
Die selbe Person-Klasse aus dem Tabellenansichtsbeispiel von Oracle verwendet. Die ursprüngliche Antwort wurde von @James_D im Orakelforum gegeben.
Grundsätzlich können Sie als Index nichts ungültiges auswählen. Im allgemeinen wird -1
table.getSelectionModel().select(-1);
, die die int select
nennt. Alternative:
table.getSelectionModel().select(null);
, die das Objekt select
, wenn Sie den gesamten Code verwendet sehen möchten Anrufe/bestätigen für dieses
public class Main extends Application {
@SuppressWarnings("unchecked")
@Override
public void start(Stage stage) {
Scene scene = new Scene(new Group());
TableView<Person> table = new TableView<Person>();
stage.setTitle("Table View Sample");
stage.setWidth(300);
stage.setHeight(500);
final Label label = new Label("Address Book");
label.setFont(new Font("Arial", 20));
table.setEditable(true);
TableColumn<Person, String> firstNameCol = new TableColumn<Person, String>("Test Name");
firstNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("name"));
table.getColumns().addAll(firstNameCol);
final VBox vbox = new VBox();
vbox.setSpacing(5);
vbox.setPadding(new Insets(10, 0, 0, 10));
vbox.getChildren().addAll(label, table);
table.itemsProperty().get().add(new Person("Hans"));
table.itemsProperty().get().add(new Person("Dieter"));
((Group) scene.getRoot()).getChildren().addAll(vbox);
table.getSelectionModel().select(-1);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
public class Person {
final StringProperty name = new SimpleStringProperty();
Person(String name) {
this.name.set(name);
}
public StringProperty nameProperty() { return this.name; }
}
}
Es wäre schön, wenn Sie Ihre Antwort verbessern könnten, indem Sie 'getSelectionModel(). ClearAndSelect (int index)' und implementieren eine "Auswahl auf Klick zum ausgewählten Element abwählen" als OP-Anfragen. –
@thatslch Ich habe deinen Code oben versucht. Die vorher ausgewählte Zeile wird nicht abgewählt, wenn ich erneut darauf klicke. – Dil
@Dil Ich missverstanden Sie Frage: Ich dachte, wie zu klären war dein Problem. – thatsIch
- 1. So heben Sie die Auswahl von Spalten in OData auf
- 2. jqGrid - So heben Sie die Auswahl der Kopfzeilen-Checkbox auf
- 3. So heben Sie die Auswahl einer uitableview-Zelle auf, wenn der Benutzer zum View-Controller zurückkehrt
- 4. So heben Sie die Registrierung registrierter SharePoint-Anwendungen auf
- 5. Aktivieren Sie ein Bild in einer ausgewählten Tabellenzeile
- 6. So rufen Sie eine JavaScript-Funktion von einem JavaFX-WebView bei Klick auf die Schaltfläche auf?
- 7. heben die Synchronisierung Eingängen textboxs
- 8. heben Sie die Auswahl von NSCollectionViewItem auf, indem Sie darauf klicken.
- 9. So erhalten Sie Attributwert aus der Tabellenzeile bei Klick
- 10. Bei Auswahl 2 werden die ausgewählten Optionen nicht angezeigt. (Laravel)
- 11. wie auf klicken Sie auf die Tabellenzeile
- 12. So ändern Sie den ausgewählten Standardwert in einer zweiten Dropdown-Liste
- 13. Wählen Sie Tabellenzeile in jQuery
- 14. So wechseln Sie Registerkarten programmgesteuert in JavaFX
- 15. Ändern Sie die Rahmenfarbe einer UITableViewCell bei Auswahl
- 16. So rufen Sie eine Funktion bei jeder Auswahl in Spinner
- 17. JavaFX Auswahl Sechseck
- 18. So heben Sie einen Wert in eine Zukunft
- 19. Warum JavaFX Date Select Event bei der zweiten Datumsauswahl funktioniert?
- 20. So modellieren Sie einen Biegestamm in JavaFX
- 21. So öffnen Sie Links in einem Browser einer Website In einem Webviewer JavaFx
- 22. JavaFX Listview - legen Sie Ihre Artikel per Mausklick zur Auswahl
- 23. jQuery UI Auswählbar - Auswahl des ausgewählten Elements beim Klicken aufheben
- 24. So passen Sie die Tabellenüberschrift und die Tabellenzeile mit einer Hintergrundfarbe in LWUIT an
- 25. So füllen Sie Listenwerte in einer Combobox in JavaFx
- 26. So machen Sie einen Teil einer Tabellenzeile klickbar mit JQuery
- 27. Index außerhalb des Bereichs Fehler bei der Auswahl der zweiten Zeile einer Datagridview in Windows Forms
- 28. So binden Sie den ausgewählten Wert einer DropDownList
- 29. So passen Sie die Auswahl mehrerer Elemente in einer areaListBox an
- 30. So ermitteln Sie die Größe einer Zeichenfolge bei einer Schriftart
Diese Implementierung hebt die Auswahl aller ausgewählten Elemente auf. Um die Auswahl nur eines Elements aufzuheben, verwenden Sie 'tableView.getSelectionModel(). ClearSelection (index);' – Ravvy