Después de de esta prolongada compilación de datos hemos podido solucionar este enigma que pueden tener ciertos de nuestros usuarios. Te dejamos la respuesta y deseamos resultarte de mucha apoyo.
Solución:
TableView table = new TableView<>();
//...
table.setRowFactory( tv ->
TableRow row = new TableRow<>();
row.setOnMouseClicked(event ->
if (event.getClickCount() == 2 && (! row.isEmpty()) )
MyType rowData = row.getItem();
System.out.println(rowData);
);
return row ;
);
Aquí hay un ejemplo de trabajo completo:
import java.util.Random;
import java.util.function.Function;
import javafx.application.Application;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class TableViewDoubleClickOnRow extends Application
@Override
public void start(Stage primaryStage)
TableView- table = new TableView<>();
table.setRowFactory(tv ->
TableRow
- row = new TableRow<>();
row.setOnMouseClicked(event ->
if (event.getClickCount() == 2 && (! row.isEmpty()) )
Item rowData = row.getItem();
System.out.println("Double click on: "+rowData.getName());
);
return row ;
);
table.getColumns().add(column("Item", Item::nameProperty));
table.getColumns().add(column("Value", Item::valueProperty));
Random rng = new Random();
for (int i = 1 ; i <= 50 ; i++)
table.getItems().add(new Item("Item "+i, rng.nextInt(1000)));
Scene scene = new Scene(table);
primaryStage.setScene(scene);
primaryStage.show();
private static
TableColumn column(String title, Function> property)
TableColumn col = new TableColumn<>(title);
col.setCellValueFactory(cellData -> property.apply(cellData.getValue()));
return col ;
public static class Item
private final StringProperty name = new SimpleStringProperty();
private final IntegerProperty value = new SimpleIntegerProperty();
public Item(String name, int value)
setName(name);
setValue(value);
public StringProperty nameProperty()
return name ;
public final String getName()
return nameProperty().get();
public final void setName(String name)
nameProperty().set(name);
public IntegerProperty valueProperty()
return value ;
public final int getValue()
return valueProperty().get();
public final void setValue(int value)
valueProperty().set(value);
public static void main(String[] args)
launch(args);
Ejemplo:
table.setOnMousePressed(new EventHandler()
@Override
public void handle(MouseEvent event)
if (event.isPrimaryButtonDown() && event.getClickCount() == 2)
System.out.println(table.getSelectionModel().getSelectedItem());
);
Si está utilizando un modelo de selección personalizado, puede obtener la fila del evento, por ejemplo:
table.setOnMousePressed(new EventHandler()
@Override
public void handle(MouseEvent event)
if (event.isPrimaryButtonDown() && event.getClickCount() == 2)
Node node = ((Node) event.getTarget()).getParent();
TableRow row;
if (node instanceof TableRow)
row = (TableRow) node;
else
// clicking on text part
row = (TableRow) node.getParent();
System.out.println(row.getItem());
);
Esto funciona para mí:
table.setOnMouseClicked((MouseEvent event) ->
if (event.getButton().equals(MouseButton.PRIMARY) && event.getClickCount() == 2)
System.out.println(table.getSelectionModel().getSelectedItem());
);
}
Nos puedes confirmar nuestro quehacer fijando un comentario o dejando una puntuación te lo agradecemos.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)