recorrer makery llenar data como code cargar javafx tableview javafx-8

makery - JavaFX8: ¿Cómo crear un escucha para la selección de una fila en Tableview?



tablecolumn javafx (5)

El elemento selectedItem en el modelo de selección es una propiedad observable, por lo que debería poder lograr esto con:

tableview1.getSelectionModel().selectedItemProperty().addListener((obs, oldSelection, newSelection) -> { if (newSelection != null) { tableview2.getSelectionModel().clearSelection(); } }); tableview2.getSelectionModel().selectedItemProperty().addListener((obs, oldSelection, newSelection) -> { if (newSelection != null) { tableview1.getSelectionModel().clearSelection(); } });

Actualmente tengo dos vistas de tabla en una pantalla, lo que resulta en que ambas vistas de tabla tienen filas que el usuario puede seleccionar.

Ahora quiero que solo se seleccione una fila al mismo tiempo (no importa desde qué TableView se seleccione). Estaba pensando en algún tipo de oyente que deselecciona la otra fila cuando se selecciona una fila. Esta es mi configuración inicial:

Paso 1 Busque una forma de vincular un método a la selección de una fila (no hay algo como tableview.setOnRowSelected(method) )

Paso 2 Crea el método que actúa como un tipo de oyente: cuando se selecciona una fila, anula la selección de la otra fila (sé cómo hacer esta parte)

Class1 selectedObject1 = (Class1)tableview1.getSelectionModel().getSelectedItem(); Class2 selectedObject2 = (Class2)tableview2.getSelectionModel().getSelectedItem(); if(selectedObject1 != null && selectedObject2 != null) { tableview1.getSelectionModel().clearSelection(); }

Entonces, el primer paso es el problema. Estaba pensando en una lista observable en la que se puede crear un oyente, y luego agregar la fila seleccionada a la lista. Cuando esto sucede, el oyente puede llamar al método. ¿Alguien tiene alguna idea de cómo hacer esto?

Cualquier ayuda es muy apreciada.


En caso de que no solo necesite la fila, sino también la posición x | y de la celda de la tabla, haga esto:

table.getFocusModel().focusedCellProperty().addListener( new ChangeListener<TablePosition>() { @Override public void changed(ObservableValue<? extends TablePosition> observable, TablePosition oldPos, TablePosition pos) { int row = pos.getRow(); int column = pos.getColumn(); String selectedValue = ""; if (table.getItems().size() > row && table.getItems().get(row).size() > column) { selectedValue = table.getItems().get(row).get(column); } label.setText(selectedValue); } });

En este ejemplo, estoy usando un TableView "clásico" con List<String> como modelo de columna. Y, por supuesto, esa label es solo un ejemplo de mi código.


Esta pregunta me ayudó, pero durante el experimento en javafx y jfoenix esto también funciona para mí.

deleteSingle.addEventHandler(MouseEvent.MOUSE_CLICKED, (e) -> { StringProperty selectedItem = table.getSelectionModel().getSelectedItem().getValue().link1; System.out.println("That is selected item : "+selectedItem); if (selectedItem.equals(null)) { System.out.println(" No item selected"); } else { System.out.println("Index to be deleted:" + selectedItem.getValue()); //Here was my database data retrieving and selectd // item deleted and then table refresh table.refresh(); return; } });


Lo uso para borrar la fila elegida.

public void ButtonClicked() { ObservableList<Names> row , allRows; allRows = table.getItems(); row = table.getSelectionModel().getSelectedItems(); row.forEach(allRows::remove); }


Mi solución sería crear una fábrica de celdas personalizada para la tabla y establecerla para cada columna de la tabla.

Callback<TableColumn<..., ...>, TableCell<..., ...>> value = param -> { TextFieldTableCell cell = new TextFieldTableCell<>(); cell.addEventFilter(MouseEvent.MOUSE_CLICKED, event -> { //your code } ); return cell; }; packageName.setCellFactory(value); table1.column1.setCellFactory(); table2.column1.setCellFactory(); ...