satırındaki boş satırlara tıklandığında bazı satırlarla TableView
var. Kullanıcı herhangi bir satırı seçebilir, ancak boş satırlara veya Stage
üzerindeki herhangi bir yere tıkladığında, TableView
geçerli seçimini silmek istiyorum.Temizle Seçimi javafx
5
A
cevap
2
yapabilirsiniz son seçilen satırı saklamak ve tıklama başka bir yere seçili satır veya üzerinde ise sahnede bir fare dinleyici ile kontrol edin: Cevabınız için
ObjectProperty<TableRow<MyRowClass>> lastSelectedRow = new SimpleObjectProperty<>();
myTableView.setRowFactory(tableView -> {
TableRow<MyRowClass> row = new TableRow<MyRowClass>();
row.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {
if (isNowSelected) {
lastSelectedRow.set(row);
}
});
return row;
});
stage.getScene().addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (lastSelectedRow.get() != null) {
Bounds boundsOfSelectedRow = lastSelectedRow.get().localToScene(lastSelectedRow.get().getLayoutBounds());
if (boundsOfSelectedRow.contains(event.getSceneX(), event.getSceneY()) == false) {
myTableView.getSelectionModel().clearSelection();
}
}
}
});
2
tıklama boş satırda oldu veya herhangi TableView
bir dış varsa, seçimi temizlemek için TableView
seçimi modeli kullanır Scene
bir olay filtre ekleyebilirsiniz:
scene.addEventFilter(MouseEvent.MOUSE_CLICKED, evt -> {
Node source = evt.getPickResult().getIntersectedNode();
// move up through the node hierarchy until a TableRow or scene root is found
while (source != null && !(source instanceof TableRow)) {
source = source.getParent();
}
// clear selection on click anywhere but on a filled row
if (source == null || (source instanceof TableRow && ((TableRow) source).isEmpty())) {
tableView.getSelectionModel().clearSelection();
}
});
çok teşekkürler ama ben çizgi de boş işaretçi istisna alıyorum stage.getScene(). addEventFilter (MouseEvent.MOUSE_CLICKED, yeni EventHandler() { –
"Sahne" nesnesine erişiminiz varsa, yukarıdaki sahnedeki stage.getScene() işlevini 'scene' ile değiştirin. Aksi halde şu soruya bir göz atın: http://stackoverflow.com/questions/30464238/javafx-getscene-returns-null – user7291698
evet sahneye erişimim vardı. Şimdi iyi çalışıyor. Çok teşekkürler –