Note that there are some explanatory texts on larger screens.

plurals
  1. POCopy data from JTable as HTML
    primarykey
    data
    text
    <p>JTable's default TransferHandler exports data in tab-delimited format. I'm trying to create my own TransferHandler that will export the data as an HTML table, but currently <em>nothing</em> gets copied to the clipboard when I use it. How can I add this feature?</p> <p>Currently I'm adding the following TransferHandler to my table using <code>table.setTransferHandler(new TableTransferHandler());</code>:</p> <pre><code>public class TableTransferHandler extends TransferHandler { final static Logger logger = LoggerFactory.getLogger("TableTransferHandler"); @Override protected Transferable createTransferable(JComponent comp) { JTable table = (JTable) comp; logger.debug("creating table selection transferable"); return new TableSelection(table); } } </code></pre> <p><code>TableSelection</code> Transferable:</p> <pre><code>public class TableSelection implements Transferable { final static Logger logger = LoggerFactory.getLogger("TableSelection"); private static DataFlavor HTML_TEXT; private static final List&lt;DataFlavor&gt; flavors = new ArrayList&lt;DataFlavor&gt;(); private JTable table; public TableSelection(JTable table) { this.table = table; } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return flavors.contains(flavor); } @Override public DataFlavor[] getTransferDataFlavors() { return flavors.toArray(new DataFlavor[0]); } @Override public Object getTransferData(DataFlavor flavor) throws IOException, UnsupportedFlavorException { if (flavor.equals(HTML_TEXT)) { StringBuilder sb = new StringBuilder("&lt;table&gt;"); int[] rows = table.getSelectedRows(); int[] cols = table.getSelectedColumns(); for (int row : rows) { int col_index = 0; sb.append("&lt;tr&gt;&lt;td&gt;"); for (int col : cols) { Object value = table.getValueAt(row, col); if (value != null) sb.append(value.toString()); if (col_index + 1 &lt; cols.length) sb.append("&lt;/td&gt;&lt;td&gt;"); } sb.append("&lt;/td&gt;&lt;/tr&gt;\n"); } sb.append("&lt;/table&gt;"); return sb.toString(); } else { throw new UnsupportedFlavorException(flavor); } } static { try { HTML_TEXT = new DataFlavor("text/html;class=java.lang.String"); flavors.add(HTML_TEXT); } catch (ClassNotFoundException e) { logger.error("Couldn't create HTML_TEXT flavor", e); } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload