Java Swing - программно скопировать в буфер обмена из JTable - PullRequest
1 голос
/ 03 декабря 2010

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

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
ActionEvent nev = new ActionEvent(fileTable, ActionEvent.ACTION_PERFORMED, "copy");
TransferHandler.getCopyAction().actionPerformed(nev);
}

, но это не имеет никакого эффекта.Какой лучший способ достичь этого?Спасибо, Питер

Ответы [ 2 ]

5 голосов
/ 03 декабря 2010

Все компоненты Swing содержат Действия, вызываемые KeyStrokes.Вы можете повторно использовать это Действие.

Action copy = table.getActionMap().get("copy");
ActionEvent ae = new ActionEvent(table, ActionEvent.ACTION_PERFORMED, "");
copy.actionPerformed(ae);

Список всех действий можно найти в Привязках клавиш .

2 голосов
/ 06 декабря 2010

Спасибо всем, кто ответил.Я провел некоторую трассировку кода Swing с помощью отладчика.Я полагаю, что код, который я разместил, и то, что опубликовал camickr, в итоге делают одно и то же.Проблема заключалась в том, что я предполагал, что «нет выбора» в таблице будет копировать все.На самом деле это неоперация - это в BasicTableUI.java, если кому-то интересно.Так что этот код работает:

ActionEvent nev = new ActionEvent(fileTable, ActionEvent.ACTION_PERFORMED, "copy");
fileTable.selectAll();
fileTable.getActionMap().get(nev.getActionCommand()).actionPerformed(nev);

В моем собственном коде я добавил строки, чтобы сохранить текущий выбор перед selectAll() и затем восстановить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...