Я хочу скопировать текст из JTable
ячейки в буфер обмена, сделав его доступным для вставки в другие программы, такие как Microsoft Word. У меня есть текст из файла JTable
, но я не знаю, как его скопировать в буфер обмена.
149
Это работает для меня и довольно просто:
Импортируйте это:
import java.awt.datatransfer.StringSelection;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
А затем поместите этот фрагмент кода туда, где вы хотите изменить буфер обмена:
String myString = "This text will be copied into clipboard";
StringSelection stringSelection = new StringSelection(myString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);
stringSelection
в качестве второго аргументаsetContents(..)
тоже, что делает егоClipboardOwner
, как в связанном ответе, не имеет значения: глядя на источник , единственный метод,ClipboardOwner
который он реализует, а именно,lostOwnership(..)
пуст. Итак, второй аргумент кажется совершенно необязательным обратным вызовом.(-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))
Следующий класс позволяет копировать / вставлять строку в / из буфера обмена.
import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import static java.awt.event.KeyEvent.*; import static org.apache.commons.lang3.SystemUtils.IS_OS_MAC; public class SystemClipboard { public static void copy(String text) { Clipboard clipboard = getSystemClipboard(); clipboard.setContents(new StringSelection(text), null); } public static void paste() throws AWTException { Robot robot = new Robot(); int controlKey = IS_OS_MAC ? VK_META : VK_CONTROL; robot.keyPress(controlKey); robot.keyPress(VK_V); robot.keyRelease(controlKey); robot.keyRelease(VK_V); } public static String get() throws Exception { Clipboard systemClipboard = getSystemClipboard(); DataFlavor dataFlavor = DataFlavor.stringFlavor; if (systemClipboard.isDataFlavorAvailable(dataFlavor)) { Object text = systemClipboard.getData(dataFlavor); return (String) text; } return null; } private static Clipboard getSystemClipboard() { Toolkit defaultToolkit = Toolkit.getDefaultToolkit(); return defaultToolkit.getSystemClipboard(); } }
источник
OS X
лучшей поддержки, если он не работает должным образомVK_CONTROL
дляVK_META
если это MacOS.Это принятый ответ, написанный декоративно:
Toolkit.getDefaultToolkit() .getSystemClipboard() .setContents( new StringSelection(txtMySQLScript.getText()), null );
источник
Для приложений на базе JavaFx .
//returns System Clipboard final Clipboard clipboard = Clipboard.getSystemClipboard(); // ClipboardContent provides flexibility to store data in different formats final ClipboardContent content = new ClipboardContent(); content.putString("Some text"); content.putHtml("<b>Some</b> text"); //this will be replaced by previous putString content.putString("Some different text"); //set the content to clipboard clipboard.setContent(content); // validate before retrieving it if(clipboard.hasContent(DataFormat.HTML)){ System.out.println(clipboard.getHtml()); } if(clipboard.hasString()){ System.out.println(clipboard.getString()); }
ClipboardContent может сохранять несколько данных в нескольких форматах данных, таких как (html, url, простой текст, изображение).
Для получения дополнительной информации см. Официальную документацию
источник
Я нашел лучший способ сделать это, чтобы вы могли получить ввод из текстового поля или создать что-то в этом текстовом поле и иметь возможность щелкнуть кнопку, чтобы сделать это.!
import java.awt.datatransfer.*; import java.awt.Toolkit; private void /* Action performed when the copy to clipboard button is clicked */ { String ctc = txtCommand.getText().toString(); StringSelection stringSelection = new StringSelection(ctc); Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); clpbrd.setContents(stringSelection, null); } // txtCommand is the variable of a text box
источник