JTable копирование выделенных ячеек в clipboard

Коллеги, прошу помочь с копированием выделенных ячеек в буфер обмена вместо CTRL+C - по правому щелчку мыши и выборе Copy. В настоящий момент я могу скопировать в буфер только одну ячейку, с которой начинал выделение. Вся область не копируется (с CTRL+C конечно копируется, но хочется понять как это сделать в Java). введите сюда описание изображения

Сейчас код выглядит так:

JMenuItem menuCopy = new JMenuItem("Copy");
menuCopy.addActionListener(e -> {
    String cellValue = table.getModel().getValueAt(table.getSelectedRow(), table.getSelectedColumn()).toString();
    StringSelection stringSelection = new StringSelection(cellValue);
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, stringSelection);
});
popup.add(menuCopy);

Ответы (1 шт):

Автор решения: mrprogre

Это было нелегко:

JMenuItem menuCopy = new JMenuItem("Copy");
        menuCopy.addActionListener(e -> {
            Clipboard clipboard;
            StringSelection stsel;    
            StringBuilder sbf = new StringBuilder();

            final int numcols = table.getSelectedColumnCount();
            final int numrows = table.getSelectedRowCount();
            final int[] rowsselected = table.getSelectedRows();
            final int[] colsselected = table.getSelectedColumns();        

            for (int i = 0; i < numrows; i++) {
                for (int j = 0; j < numcols; j++) {
                    sbf.append(table.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);
            });
        popup.add(menuCopy);
→ Ссылка