Objetivo: Aprimorar a UX do cliente desktop para seguir convenções nativas, como o menu de contexto (clique direito), e manter a edição por duplo clique.
MainViewController.java (Trecho Refatorado do initialize)
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
// ... (configuração das colunas, setEditable, setCellFactory, setOnEditCommit, etc.) ...
// Boas Práticas: Adiciona um menu de contexto às linhas da tabela
tabelaTarefas.setRowFactory(tv -> {
TableRow<Tarefa> row = new TableRow<>();
ContextMenu contextMenu = new ContextMenu();
MenuItem editarItem = new MenuItem("Editar Descrição");
// A ação do menu dispara o mesmo modo de edição do duplo clique
editarItem.setOnAction(event -> {
row.getTableView().edit(row.getIndex(), colunaDescricao);
});
MenuItem deletarItem = new MenuItem("Deletar Tarefa");
deletarItem.setOnAction(event -> deletarTarefa(row.getItem()));
contextMenu.getItems().addAll(editarItem, new SeparatorMenuItem(), deletarItem);
// Mostra o menu apenas se a linha não estiver vazia
row.contextMenuProperty().bind(
Bindings.when(row.emptyProperty())
.then((ContextMenu)null)
.otherwise(contextMenu)
);
return row;
});
// ... (resto do método) ...
carregarTarefas();
}
TextFieldTableCell e setOnEditCommit, já é uma boa prática e deve ser mantida, pois oferece um atalho rápido para o usuário. O menu de contexto serve como uma alternativa mais explícita.