Как скопировать содержимое jtable в буфер обмена

У меня есть jtable с данными. Я хочу создать Java-код для Action Jbutton. Мое требование - когда я нажимаю кнопку, а затем копировать весь контент jtable на клип-панель. как я могу это сделать.

String[] columnNames={"DATE","Steet"};
 String[][] cells=new String[ar.size()][2];
 for(int i=0;i
<ul> <li> в этом коде <span> Ар</span> - мой arraylist.</li> <li> <span> как я могу написать код, который может скопировать содержимое этой Jtable.</span></li> </ul>
3 ответа

Когда мне нужно было это сделать в прошлом, я начал с кода здесь: http://www.javaworld.com/javatips/jw-javatip77.html

И изменено, чтобы создать действие для кнопки, которая скопировала бы данные и заголовки столбцов из таблицы в буфер обмена.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.datatransfer.*;
import java.util.*;
/**
 * ExcelAdapter enables Copy-Paste Clipboard functionality on JTables.
 * The clipboard data format used by the adapter is compatible with
 * the clipboard format used by Excel. This provides for clipboard
 * interoperability between enabled JTables and Excel.
 */
public class ExcelAdapter implements ActionListener
 {
 private String rowstring,value;
 private Clipboard system;
 private StringSelection stsel;
 private JTable jTable1 ;
 /**
 * The Excel Adapter is constructed with a
 * JTable on which it enables Copy-Paste and acts
 * as a Clipboard listener.
 */
public ExcelAdapter(JTable myJTable)
 {
 jTable1 = myJTable;
 KeyStroke copy = KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK,false);
 // Identifying the copy KeyStroke user can modify this
 // to copy on some other Key combination.
 KeyStroke paste = KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK,false);
 // Identifying the Paste KeyStroke user can modify this
 //to copy on some other Key combination.
jTable1.registerKeyboardAction(this,"Copy",copy,JComponent.WHEN_FOCUSED);
jTable1.registerKeyboardAction(this,"Paste",paste,JComponent.WHEN_FOCUSED);
 system = Toolkit.getDefaultToolkit().getSystemClipboard();
 }
 /**
 * Public Accessor methods for the Table on which this adapter acts.
 */
public JTable getJTable() {return jTable1;}
public void setJTable(JTable jTable1) {this.jTable1=jTable1;}
 /**
 * This method is activated on the Keystrokes we are listening to
 * in this implementation. Here it listens for Copy and Paste ActionCommands.
 * Selections comprising non-adjacent cells result in invalid selection and
 * then copy action cannot be performed.
 * Paste is done by aligning the upper left corner of the selection with the
 * 1st element in the current selection of the JTable.
 */
public void actionPerformed(ActionEvent e)
 {
 if (e.getActionCommand().compareTo("Copy")==0)
 {
 StringBuffer sbf=new StringBuffer();
 // Check to ensure we have selected only a contiguous block of
 // cells
 int numcols=jTable1.getSelectedColumnCount();
 int numrows=jTable1.getSelectedRowCount();
 int[] rowsselected=jTable1.getSelectedRows();
 int[] colsselected=jTable1.getSelectedColumns();
 if (!((numrows-1==rowsselected[rowsselected.length-1]-rowsselected[0] &&
 numrows==rowsselected.length) &&
(numcols-1==colsselected[colsselected.length-1]-colsselected[0] &&
 numcols==colsselected.length)))
 {
 JOptionPane.showMessageDialog(null, "Invalid Copy Selection",
 "Invalid Copy Selection",
 JOptionPane.ERROR_MESSAGE);
 return;
 }
 for (int i=0;i


JTable уже поддерживает копию Action. Действие Действие карты Действие показывает, как вы можете легко использовать это действие с JButton, поэтому вам не нужно переписывать код.


Вот обновленная версия ExcelAdapter от javaworld (с 1999 года). Ссылка

Для использования:

jTable1.addKeyListener(new ClipboardKeyAdapter(jTable1));

ClipboardKeyAdapter.java

public class ClipboardKeyAdapter extends KeyAdapter {
 private static final String LINE_BREAK = "\r"; 
 private static final String CELL_BREAK = "\t"; 
 private static final Clipboard CLIPBOARD = Toolkit.getDefaultToolkit().getSystemClipboard(); 
 private final JTable table; 
 public ClipboardKeyAdapter(JTable table) { 
 this.table = table; 
 } 
 @Override 
 public void keyReleased(KeyEvent event) { 
 if (event.isControlDown()) { 
 if (event.getKeyCode()==KeyEvent.VK_C) { // Copy 
 cancelEditing(); 
 copyToClipboard(false); 
 } else if (event.getKeyCode()==KeyEvent.VK_X) { // Cut 
 cancelEditing(); 
 copyToClipboard(true); 
 } else if (event.getKeyCode()==KeyEvent.VK_V) { // Paste 
 cancelEditing(); 
 pasteFromClipboard(); 
 } 
 } 
 } 
 private void copyToClipboard(boolean isCut) { 
 int numCols=table.getSelectedColumnCount(); 
 int numRows=table.getSelectedRowCount(); 
 int[] rowsSelected=table.getSelectedRows(); 
 int[] colsSelected=table.getSelectedColumns(); 
 if (numRows!=rowsSelected[rowsSelected.length-1]-rowsSelected[0]+1 || numRows!=rowsSelected.length || 
 numCols!=colsSelected[colsSelected.length-1]-colsSelected[0]+1 || numCols!=colsSelected.length) {
 JOptionPane.showMessageDialog(null, "Invalid Copy Selection", "Invalid Copy Selection", JOptionPane.ERROR_MESSAGE);
 return; 
 } 
 StringBuffer excelStr=new StringBuffer(); 
 for (int i=0; i<numrows; i++)="" {="" for="" (int="" j="0;" j<numcols;="" j++)="" excelstr.append(escape(table.getvalueat(rowsselected[i],="" colsselected[j])));="" if="" (iscut)="" table.setvalueat(null,="" rowsselected[i],="" colsselected[j]);="" }="" (j<numcols-1)="" excelstr.append(cell_break);="" excelstr.append(line_break);="" stringselection="" sel="new" stringselection(excelstr.tostring());="" clipboard.setcontents(sel,="" sel);="" private="" void="" pastefromclipboard()="" int="" startrow="table.getSelectedRows()[0];" startcol="table.getSelectedColumns()[0];" string="" pastestring="" ;="" try="" catch="" (exception="" e)="" joptionpane.showmessagedialog(null,="" "invalid="" paste="" type",="" joptionpane.error_message);="" return;="" string[]="" lines="pasteString.split(LINE_BREAK);" i="0" i<lines.length;="" cells="lines[i].split(CELL_BREAK);" j<cells.length;="" (table.getrowcount()="">startRow+i && table.getColumnCount()>startCol+j) { 
 table.setValueAt(cells[j], startRow+i, startCol+j); 
 } 
 } 
 } 
 } 
 private void cancelEditing() { 
 if (table.getCellEditor() != null) { 
 table.getCellEditor().cancelCellEditing(); 
 } 
 } 
 private String escape(Object cell) { 
 return cell.toString().replace(LINE_BREAK, " ").replace(CELL_BREAK, " "); 
 } 
}
</numrows;>

licensed under cc by-sa 3.0 with attribution.