2016-05-26 11 views
2

Ich habe ein kleines Problem Ich muss genau eine Spalte (Zelle) der Zeile unabhängig auswählen, wo ich in Zeile klicke.JavaFX Auswahl Text aus der zweiten Spalte spielt keine Rolle wo in der Zeile geklickt wird

Zum Beispiel habe ich 3 Spalte Tabelle, ich klicke auf erste Spalte, aber ich brauche Text der zweiten Spalte jedes Mal.

Gibt es eine Möglichkeit, das kann ich tun. In Swing gab es Indizes für Zeilen und Spalten, aber ich kann in JavaFX nichts finden.

Mein Code für Doppelklick Auswahl ist:

@Override 
public void handle(MouseEvent click) { 
    if (click.getClickCount() == 2) { 
     @SuppressWarnings("rawtypes") 
     TablePosition pos = searchResult.getSelectionModel().getSelectedCells().get(0); 
     int row = pos.getRow(); 
     int col = pos.getColumn(); 
     @SuppressWarnings("rawtypes") 
     TableColumn column = pos.getTableColumn(); 
     String val = column.getCellData(row).toString(); 
     System.out.println("Selected Value, " + val + ", Column: " + col + ", Row: " + row); 
     try { 
      if (button1.isSelected()) { 
       Runtime.getRuntime().exec("explorer.exe /select," + val); 
      } else { 
       if (button2.isSelected()) { 
        File file = new File(val); 
        Desktop.getDesktop().open(file); 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

Vielen Dank für alle Antworten.

Antwort

2

Wenn Sie tatsächlich auswählen möchten, können Sie die Zelle

Sie setzen den cellSelectionEnabledProperty of the selection model of your table view zu true.

Sie können auf die Änderung der focused cell property of the focus model of your table view hören.

Dann in der Änderung Listener können Sie eine beliebige TableColumn was Sie wollen in der gleichen Zeile.

Beispiel:

// Enable cell selection 
tableView.getSelectionModel().setCellSelectionEnabled(true); 

// On focused property change 
tableView.getFocusModel().focusedCellProperty().addListener(new ChangeListener<TablePosition>() { 

    @Override 
    public void changed(ObservableValue<? extends TablePosition> arg0, TablePosition arg1, TablePosition arg2) { 
     // Select TableColumn "col2" in the same row 
     tableView.getSelectionModel().select(arg2.getRow(), col2); 

    } 
}); 

Dies wird einen tableview erzeugen, welche die Zelle in der gewünschten Spalte wählt unabhängig die Zelle in der Zeile ausgewählt ist.

Wenn Sie nur den Wert einer Zelle auf die Zeilenauswahl

// Just row selection 
tableView.getSelectionModel().setCellSelectionEnabled(false); 

tableView.getFocusModel().focusedCellProperty().addListener(new ChangeListener<TablePosition>() { 

    @Override 
    public void changed(ObservableValue<? extends TablePosition> arg0, TablePosition arg1, TablePosition arg2) { 
     // Get the data from the desired cell (tableview displays Data objects) 
     Data item = tableView.getItems().get(arg2.getRow()); 
     String data = (String) col2.getCellObservableValue(item).getValue(); 
     System.out.println(data); 
    } 
}); 

In diesem Beispiel wird erhalten möchten und gibt den Wert von der gewünschten Spalte unabhängig die Spalte ausgewählt wird.

+0

Dank Sie sehr viel –

2

Registrieren Sie die Maus Zuhörer mit der Tabellenzeile, eine Reihe Fabrik mit:

TableView<MyDataType> tableView = ... ; 

tableView.setRowFactory(tv -> { 
    TableRow<MyDataType> row = new TableRow<>(); 
    row.setOnMouseClicked(e -> { 
     if (e.getClickCount() == 2) { 
      MyDataType rowData = row.getItem(); 
      if (rowData != null) { 
       // get value displayed in second column from rowData... 
       // and process it however you need 
      } 
     } 
    }); 
    return row ; 
}); 
Verwandte Themen