javafx: double click on a blank row opens the previusly selected object

Given a TableView, I need to detect the doubleclick in order to open a new window of the related object.

But if I select an object and than I click in a blank space of my tableview, it will open the object that I previously selected.

I've been looking around and everybody define an object row for the tableview and when the row is empty (row.isEmpty()) they solve the problem.

And so, my question is: can I do the same thing without specifying the rows of the TableView?

Here's the controller for my table:

I'm italian so some stuff is written in Italian (like object and variables name) I highlighted the part that are important for the creation of the table with the following comment: /**part of the tableview**/

    package application;

    import java.net.URL;
    import java.util.ResourceBundle;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.fxml.FXML;
    import javafx.fxml.FXMLLoader;
    import javafx.fxml.Initializable;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.TableColumn;
    import javafx.scene.control.TableView;
    import javafx.scene.control.cell.PropertyValueFactory;
    import javafx.scene.image.Image;
    import javafx.scene.image.ImageView;
    import javafx.scene.input.MouseEvent;
    import javafx.stage.Stage;



    public class ControllerListaTest implements Initializable,EventHandler<ActionEvent>{
    	
    	private final Image immagine1  = new Image("https://pa1.narvii.com/6360/8fcb3b5341f11cbb119ff7139350c6d1296b338d_hq.gif");
    	private final Image immagine2  = new Image("http://www.peency.com/images/2015/10/04/vegeta-majin-gif.gif");
    	private final Image immagine3  = new Image("https://static.comicvine.com/uploads/original/11133/111334329/6132586-0162048443-9e374.gif");
    @FXML
    private Button bottone;
    //la creazione della tabella è stata fatta con scene builder le colonne sono state invece create direttamente dal file mostraopere.fxml
    /****creation of the table****/
    @FXML private TableView<Opera> tabella; //imposto il contenuto della tabella
    /****creation of the columns****/
    @FXML private TableColumn<Opera,ImageView> colonna1;//imposto il tipo della prima colonna
    @FXML private TableColumn<Opera,String> colonna2;//imposto il tipo della seconda colonna
    @FXML private TableColumn<Opera,String> colonna3;//imposto il tipo della terza colonna



    @Override
    public void initialize(URL url, ResourceBundle rb) {
    /****setting the table ****/
    	tabella.setMaxWidth(600);
    	tabella.setMinWidth(600);
    	colonna1.setMinWidth(200);
    	colonna1.setMaxWidth(200);
    	colonna2.setMinWidth(200);
    	colonna2.setMinWidth(200);
    	colonna3.setMinWidth(200);
    	colonna3.setMinWidth(200);
    	
    	bottone.setOnAction(this);
    }

    @Override
    public void handle(ActionEvent event) {
    	// TODO Auto-generated method stub
    	if(event.getSource()==bottone) {
    		//creazione delle opere
    		Opera opera = new Opera("Il SuperSayan","Giangiacomo Frizzantino",immagine1);
    		Opera opera1 = new Opera("Goku è scarso ed ecco perchè","Pierpaolo stracazzi",immagine2);
    		Opera opera2 = new Opera("mi piace la droga","Marzio Fannullone",immagine3);
    		Opera opera3 = new Opera("10 cose positive della bestiality","Patrizio Fallo");
    		//creazione del contenuto di un opera
    		ContenutoOpera immagineuno = new ContenutoOpera(immagine1,opera,"1");
    		ContenutoOpera immaginedue = new ContenutoOpera(immagine1,opera,"2");
    		ContenutoOpera immaginetre = new ContenutoOpera(immagine1,opera,"3");
    		ContenutoOpera immaginequattro = new ContenutoOpera(opera,"4");
    		//caricamento dell contenuto di un opera nelle rispettive liste(Opere)
    		opera.addImmagine(immagineuno);
    		opera.addImmagine(immaginedue);
    		opera.addImmagine(immaginetre);
    		opera.addImmagine(immagineuno);
    		opera.addImmagine(immaginedue);
    		opera.addImmagine(immaginetre);
    		opera.addImmagine(immagineuno);
    		opera.addImmagine(immaginedue);
    		opera.addImmagine(immaginetre);
    		opera.addImmagine(immagineuno);
    		opera.addImmagine(immaginedue);
    		opera.addImmagine(immaginetre);
    		opera.addImmagine(immagineuno);
    		opera.addImmagine(immaginedue);
    		opera.addImmagine(immaginedue);
    		opera.addImmagine(immaginetre);
    		opera.addImmagine(immagineuno);
    		opera.addImmagine(immaginedue);
    		opera.addImmagine(immaginetre);
    		opera1.addImmagine(immaginetre);
    		opera1.addImmagine(immaginetre);
    		opera.addImmagine(immaginequattro);
    		//indirizzo il contenuto delle colonne
            /****setting the column****/
    		colonna1.setCellValueFactory(new PropertyValueFactory<>("Image"));
    		colonna2.setCellValueFactory(new PropertyValueFactory<>("Opera"));
    		colonna3.setCellValueFactory(new PropertyValueFactory<>("Autore"));
    		//creo una lista di opere
    		ObservableList<Opera> opere = FXCollections.observableArrayList();
    		//aggiungo le opere alla lista
    		opere.add(opera);
    		opere.add(opera1);
    		opere.add(opera2);
    		opere.add(opera3);
    		//TEST
    		System.out.println(opera.getLista().size() + " (numero di elementi in opera)");
/****retrive the elements of a list and add them to the table****/
    		tabella.getItems().setAll(opere);
    		/****resulted from the click of the table****/
    		tabella.setOnMousePressed(new EventHandler<MouseEvent>(){
    			
                @Override
                public void handle(MouseEvent event) {                
                   // System.out.println(tabella.getSelectionModel().getSelectedItem().getNome());
               	/****check the double click****
if(event.getClickCount() == 2){ 
                	if(tabella.getSelectionModel().getSelectedItem().getAutore()!="")  //ricordarsi di fare il controllo per verificare che l'oggetto è di tipo ContenutoOpera
                	try {
                		    FXMLLoader fxmlLoader = new FXMLLoader();
                		    		fxmlLoader.setLocation(getClass().getResource("ciao label.fxml"));
                		    		Parent root1 = (Parent) fxmlLoader.load();
                		    		
                		            Stage stage = new Stage();
                		            stage.setScene(new Scene(root1)); 
                		            Controllerlabel controller = fxmlLoader.getController();
         /****passes the selected object to another controller**** 
  		            controller.initData(tabella.getSelectionModel().getSelectedItem());        
                		            stage.show();
                		    } catch(Exception e) {
                		       e.printStackTrace();
                		      }
                		}
                	}
                }

            );
    		
    	
    	}

    }
    public void pressButton(ActionEvent event) throws Exception {               
        try {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("ciao label.fxml"));
                Parent root1 = (Parent) fxmlLoader.load();
                Stage stage = new Stage();
                stage.setScene(new Scene(root1));  
                stage.show();
        } catch(Exception e) {
           e.printStackTrace();
          }
    }
    }

Relevant tags