Results 1 to 5 of 5
  1. #1
    willlotr is offline Member
    Join Date
    Mar 2011
    Posts
    2
    Rep Power
    0

    Default JTable copy and paste problem on Mac

    I have been working an application which uses swing's JTable to store data and I really need to be able to copy and paste data to and from excel. So far, this is working in Windows but I can't get it to work for the Mac. I've pasted the code below. Any ideas on fixing this problem would be much appreciated.

    ---
    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.C TRL_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.C TRL_MASK,false);

    // Identifying the Paste KeyStroke user can modify this
    //to copy on some other Key combination.
    jTable1.registerKeyboardAction(this,"Copy",copy,JC omponent.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<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());
    system = Toolkit.getDefaultToolkit().getSystemClipboard();
    system.setContents(stsel,stsel);
    }
    if (e.getActionCommand().compareTo("Paste")==0)
    {
    System.out.println("Trying to Paste");
    int startRow=(jTable1.getSelectedRows())[0];
    int startCol=(jTable1.getSelectedColumns())[0];
    try
    {
    String trstring= (String)(system.getContents(this).getTransferData( DataFlavor.stringFlavor));
    System.out.println("String is:"+trstring);
    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+"atrow="+startRow+i+"column="+startCol+j);
    }
    }
    }
    catch(Exception ex){ex.printStackTrace();}
    }
    }
    }
    ---

  2. #2
    DarrylBurke's Avatar
    DarrylBurke is offline Forum Police
    Join Date
    Sep 2008
    Location
    Madgaon, Goa, India
    Posts
    11,305
    Rep Power
    20

    Default

    Why don't you try asking wherever you lifted that class from?

    db

  3. #3
    willlotr is offline Member
    Join Date
    Mar 2011
    Posts
    2
    Rep Power
    0

    Default

    That's a great question. Unfortunately that site wasn't much help.

  4. #4
    camickr is offline Senior Member
    Join Date
    Jul 2009
    Posts
    1,236
    Rep Power
    7

  5. #5
    efermion is offline Member
    Join Date
    Apr 2011
    Posts
    1
    Rep Power
    0

    Default

    The problem is the end of line character \n. We got it to work on both platforms by simply changing "\n" to "\r\n" in the two lines:
    sbf.append("\n");
    StringTokenizer st1=new StringTokenizer(trstring,"\n");
    That is not the "official" way (think System.getProperty("line.separator")) but it seems to work.

Similar Threads

  1. Disable copy paste in SWT Text Component
    By subysri in forum SWT / JFace
    Replies: 1
    Last Post: 09-18-2010, 10:11 AM
  2. Copy, Cut and Paste Problems!
    By bones in forum New To Java
    Replies: 4
    Last Post: 07-17-2009, 10:18 AM
  3. Cut, copy and Paste in JTextPane
    By Gudradain in forum AWT / Swing
    Replies: 1
    Last Post: 01-03-2009, 06:43 AM
  4. Problems with copy paste
    By fredand44 in forum Eclipse
    Replies: 0
    Last Post: 12-17-2008, 04:14 PM
  5. How to copy and paste data with the clipboard
    By Java Tip in forum SWT Tips
    Replies: 0
    Last Post: 07-07-2008, 04:35 PM

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •