2012-11-27 11 views
7

मैं निम्नलिखित कॉलबैक एक tableview के चयनित सेल पर सुन है द्वारा संदर्भित ऑब्जेक्ट प्राप्त जो डबलक्लेक्टेड है, ताकि मैं इसे किसी अन्य वर्ग में पास कर सकूं और सामान कर सकूं ... कोई विचार यह कैसे करें ???JavaFX, एक TableCell

अग्रिम धन्यवाद।

उत्तर

10

MyFTPFile ऑब्जेक्ट सेल की पंक्ति से जुड़ा हुआ है, इसलिए, जैसा कि पूछताछकर्ता ने अपनी टिप्पणी में बताया, यह cell.getTableRow().getItem() के माध्यम से पुनर्प्राप्त करने योग्य है।

पहले मैंने सोचा कि यह cell.getItem() होना चाहिए, जो सेल से जुड़े डेटा मान को वापस कर देता है। हालांकि, अधिकांश समय, सेल डेटा मान वस्तु के बजाए बैकिंग आइटम की एक संपत्ति होगी (उदाहरण के लिए एक MyFTPFile ऑब्जेक्ट का फ़ाइल नाम फ़ील्ड)। जिज्ञासु के लिए

निष्पादन नमूना:।

import javafx.application.Application; 
import javafx.event.EventHandler; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.control.TableCell; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.scene.control.cell.TextFieldTableCell; 
import javafx.scene.input.MouseEvent; 
import javafx.stage.Stage; 
import javafx.util.Callback; 

public class TableClickListener extends Application { 

    public static void main(String[] args) { 
    launch(args); 
    } 

    class FTPTableCell<S, T> extends TextFieldTableCell<S, T> { 
    FTPTableCell() { 
     super(); 
     addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      if (event.getClickCount() > 1 && getItem() != null) { 
      System.out.println("Sending " + getTableRow().getItem() + " to the FTP client"); 
      } 
     } 
     }); 
    } 
    } 

    final Callback<TableColumn<MyFTPFile, String>, TableCell<MyFTPFile, String>> FTP_TABLE_CELL_FACTORY = 
     new Callback<TableColumn<MyFTPFile, String>, TableCell<MyFTPFile, String>>() { 
     public TableCell<MyFTPFile, String> call(TableColumn<MyFTPFile, String> p) { 
      return new FTPTableCell<>(); 
     } 
     }; 

    @Override 
    public void start(final Stage stage) { 
    final TableView<MyFTPFile> table = new TableView<>(); 

    final TableColumn<MyFTPFile, String> filenameColumn = new TableColumn<>("Filename"); 
    filenameColumn.setCellValueFactory(new PropertyValueFactory<MyFTPFile, String>("filename")); 
    filenameColumn.setCellFactory(FTP_TABLE_CELL_FACTORY); 
    filenameColumn.setMinWidth(150); 

    final TableColumn<MyFTPFile, String> ratingColumn = new TableColumn<>("Rating"); 
    ratingColumn.setCellValueFactory(new PropertyValueFactory<MyFTPFile, String>("rating")); 
    ratingColumn.setCellFactory(FTP_TABLE_CELL_FACTORY); 
    ratingColumn.setMinWidth(20); 

    table.getColumns().setAll(filenameColumn, ratingColumn); 

    table.getItems().setAll(
     new MyFTPFile("xyzzy.txt", 10), 
     new MyFTPFile("management_report.doc", 1), 
     new MyFTPFile("flower.png", 7) 
    ); 

    table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

    stage.setScene(new Scene(new Group(table))); 
    stage.show(); 
    } 

    public class MyFTPFile { 
    private final String filename; 
    private final int rating; 

    MyFTPFile(String filename, int rating) { 
     this.filename = filename; 
     this.rating = rating; 
    } 

    public String getFilename() { 
     return filename; 
    } 

    public int getRating() { 
     return rating; 
    } 

    @Override 
    public String toString() { 
     return "MyFTPFile{" + 
      "filename='" + filename + '\'' + 
      ", rating=" + rating + 
      '}'; 
    } 
    } 

} 
+2

Thx, लेकिन यह cell.getTableRow() GetItem() है, मैं उपयोग करने के लिए, वस्तु प्राप्त करने के लिए किया है। – Ilir

+1

तो यह है :-)। । । जवाब सही – jewelsea