Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to copy content of the jtable to clipboard

i have jtable filed with data. i want to create java code for Action of the Jbutton. My requirement is when i click the button, then copy all the content of jtable to clip board. how can i do that.

    String[] columnNames={"DATE","Steet"};
    String[][] cells=new String[ar.size()][2];
    for(int i=0;i<ar.size();i++){
        cells[i][0]=((PRIvariable)ar.get(i)).incDate;
        cells[i][1]=((PRIvariable)ar.get(i)).selectedSteer;
    }
    table = new JTable(cells,columnNames);
    table.setVisible(true);
    table.setSize(400, 400);
    js=new JScrollPane();
    js.setViewportView(table);
    js.setBounds(10, 230,500, 215);
    js.setVisible(true);
    add(js,java.awt.BorderLayout.CENTER);
  • in this code ar is my arraylist.
  • how can i write the code witch can copy the content of this Jtable.
like image 217
Chamal Avatar asked Jan 12 '11 17:01

Chamal


People also ask

How do you make a JTable cell editable?

jTableAssignments = new javax. swing. JTable() { public boolean isCellEditable(int rowIndex, int colIndex) { return editable; }};

What is JTable TableModel?

The TableModel interface specifies the methods the JTable will use to interrogate a tabular data model. The JTable can be set up to display any data model which implements the TableModel interface with a couple of lines of code: TableModel myData = new MyTableModel(); JTable table = new JTable(myData);

What is JTable used for?

The JTable is used to display and edit regular two-dimensional tables of cells. See How to Use Tables in The Java Tutorial for task-oriented documentation and examples of using JTable .

How do I find my JTable model?

All you will need to have the model will be: DefaultTableModel model = (DefaultTableModel) table. getModel();


Video Answer


1 Answers

When I needed to do this in the past I started with the code here: http://www.javaworld.com/javatips/jw-javatip77.html

And modified to create an action for a button that would copy the data and the column headings from a table to the clipboard.

import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.StringTokenizer;




/**
 * 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 clipboard;
    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;
        final KeyStroke copy = KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK, false);
        // Identifying the copy KeyStroke user can modify this
        // to copy on some other Key combination.
        final KeyStroke paste = KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.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);
        clipboard = 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.
     */
    @Override
    public void actionPerformed(ActionEvent e) {

        final String actionCommand = e.getActionCommand();

        if (actionCommand.equals("Copy")) {

            StringBuilder sbf = new StringBuilder();
            // Check to ensure we have selected only a contiguous block of cells.
            final int numcols = jTable1.getSelectedColumnCount();
            final int numrows = jTable1.getSelectedRowCount();
            final int[] rowsselected = jTable1.getSelectedRows();
            final 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 < numrows; i++) {
                for (int j = 0; j < numcols; j++) {
                    sbf.append(jTable1.getValueAt(rowsselected[i], colsselected[j]));
                    if (j < numcols - 1) {
                        sbf.append('\t');
                    }
                }
                sbf.append('\n');
            }
            stsel = new StringSelection(sbf.toString());
            clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
            clipboard.setContents(stsel, stsel);

        } else if (actionCommand.equals("Paste")) {

            System.out.println("Trying to Paste");
            final int startRow = (jTable1.getSelectedRows())[0];
            final int startCol = (jTable1.getSelectedColumns())[0];
            try {
                final String trString = (String) (clipboard.getContents(this).getTransferData(DataFlavor.stringFlavor));
                System.out.println("String is:" + trString);
                final StringTokenizer st1 = new StringTokenizer(trString, "\n");
                for (int i = 0; st1.hasMoreTokens(); i++) {
                    rowstring = st1.nextToken();
                    StringTokenizer st2 = new StringTokenizer(rowstring, "\t");
                    for (int j = 0; st2.hasMoreTokens(); j++) {
                        value = (String) st2.nextToken();
                        if (startRow + i < jTable1.getRowCount() &&
                                startCol + j < jTable1.getColumnCount()) {
                            jTable1.setValueAt(value, startRow + i, startCol + j);
                        }
                        System.out.println("Putting " + value + "at row = " + startRow + i + " column = " + startCol + j);
                    }
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }

        }

    }

}
like image 137
jzd Avatar answered Nov 07 '22 19:11

jzd