2012-07-05 20 views

उत्तर

0

मुझे यकीन नहीं है, लेकिन मुझे लगता है कि javafx.scene.input.Clipboard आपको यहां मदद कर सकता है।

9
tableView.getSelectionModel().setCellSelectionEnabled(true); 
tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 

MenuItem item = new MenuItem("Copy"); 
item.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent event) { 
     ObservableList<TablePosition> posList = tableView.getSelectionModel().getSelectedCells(); 
     int old_r = -1; 
     StringBuilder clipboardString = new StringBuilder(); 
     for (TablePosition p : posList) { 
      int r = p.getRow(); 
      int c = p.getColumn(); 
      Object cell = tableView.getColumns().get(c).getCellData(r); 
      if (cell == null) 
       cell = ""; 
      if (old_r == r) 
       clipboardString.append('\t'); 
      else if (old_r != -1) 
       clipboardString.append('\n'); 
      clipboardString.append(cell); 
      old_r = r; 
     } 
     final ClipboardContent content = new ClipboardContent(); 
     content.putString(clipboardString.toString()); 
     Clipboard.getSystemClipboard().setContent(content); 
    } 
}); 
ContextMenu menu = new ContextMenu(); 
menu.getItems().add(item); 
tableView.setContextMenu(menu); 
3

मैं Yelliver के उत्तर को लागू नहीं कर सका, यह मेरे लिए संकलन नहीं है, लेकिन मैं tableview के कई चयनित डेटा क्लिपबोर्ड को निकालने के लिए एक और बहुत स्पष्ट रास्ता मिल गया है, यह के रूप में

TableView tableView = new TableView(); 
tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 
MenuItem item = new MenuItem("Copy"); 
    item.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 

      ObservableList rowList = (ObservableList) tableView.getSelectionModel().getSelectedItems(); 

      StringBuilder clipboardString = new StringBuilder(); 

      for (Iterator it = rowList.iterator(); it.hasNext();) { 
       ObservableList<Object> row = (ObservableList<Object>) it.next(); 

       for (Object cell : row) { 
        if (cell == null) { 
         cell = ""; 
        } 
        clipboardString.append(cell); 
        clipboardString.append('\t'); 
       } 
       clipboardString.append('\n'); 

      } 
      final ClipboardContent content = new ClipboardContent(); 

      content.putString(clipboardString.toString()); 
      Clipboard.getSystemClipboard().setContent(content); 
     } 
    }); 
    ContextMenu menu = new ContextMenu(); 
    menu.getItems().add(item); 
    tableView.setContextMenu(menu); 
} 
इस प्रकार चला जाता है

आशा है कि यह आपकी मदद कर सकता है, या कोई भी आसानी से प्रतिलिपि बनाने की कोशिश कर रहा है TableView के डेटा

1

येलिवर का समाधान केवल चयनित कोशिकाओं की सामग्री की प्रतिलिपि बनाता है, लेकिन स्पष्ट रूप से केवल उन कक्षों को जिन्हें स्पष्ट रूप से क्लिक किया गया था, को चुना जाता है। रॉबर्टो का समाधान केवल तभी काम करता है जब तालिका में रखी गई वस्तुएं पुन: प्रयोज्य हों। यहाँ एक सामान्य समाधान है कि प्रतियां सभी चयनित पंक्तियों में सभी कक्षों से डेटा है:

@SuppressWarnings("rawtypes") 
public void copySelectionToClipboard(final TableView<?> table) { 
    final Set<Integer> rows = new TreeSet<>(); 
    for (final TablePosition tablePosition : table.getSelectionModel().getSelectedCells()) { 
     rows.add(tablePosition.getRow()); 
    } 
    final StringBuilder strb = new StringBuilder(); 
    boolean firstRow = true; 
    for (final Integer row : rows) { 
     if (!firstRow) { 
      strb.append('\n'); 
     } 
     firstRow = false; 
     boolean firstCol = true; 
     for (final TableColumn<?, ?> column : table.getColumns()) { 
      if (!firstCol) { 
       strb.append('\t'); 
      } 
      firstCol = false; 
      final Object cellData = column.getCellData(row); 
      strb.append(cellData == null ? "" : cellData.toString()); 
     } 
    } 
    final ClipboardContent clipboardContent = new ClipboardContent(); 
    clipboardContent.putString(strb.toString()); 
    Clipboard.getSystemClipboard().setContent(clipboardContent); 
} 

Ctrl + C के साथ नकल को सक्षम करने के

final KeyCodeCombination keyCodeCopy = new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_ANY); 
    table.setOnKeyPressed(event -> { 
     if (keyCodeCopy.match(event)) { 
      copySelectionToClipboard(table); 
     } 
    }); 
जोड़ने
संबंधित मुद्दे