/* * A simple Java program that demonstrates how cut/copy/paste works. * * Ben Bederson, May 3, 2002 * * Bugs - Can't paste text from a webpage */ import java.io.*; import java.awt.*; import java.awt.event.*; import java.awt.dnd.*; import java.awt.datatransfer.*; import javax.swing.*; import javax.swing.text.*; public class CopyPasteExample extends JFrame { JMenuBar menuBar; JTextArea textArea; public CopyPasteExample() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Create a menu menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("File"); fileMenu.add(new AbstractAction("Exit") { public void actionPerformed(ActionEvent e) { System.exit(0); } }); JMenu editMenu = new JMenu("Edit"); editMenu.add(new AbstractAction("Cut") { public void actionPerformed(ActionEvent e) { cut(); } }); editMenu.add(new AbstractAction("Copy") { public void actionPerformed(ActionEvent e) { copy(); } }); editMenu.add(new AbstractAction("Paste") { public void actionPerformed(ActionEvent e) { Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable transferable = clipboard.getContents(null); paste(transferable); } }); menuBar.add(fileMenu); menuBar.add(editMenu); // Create a text box textArea = new JTextArea(); textArea.setRows(20); textArea.setColumns(50); JScrollPane scrollPane = new JScrollPane(textArea); // Set up the GUI setJMenuBar(menuBar); getContentPane().add(scrollPane); pack(); // Calculate the size of the window setVisible(true); // Make the window visible } public void cut() { copy(); deleteSelection(); } public Transferable copy() { Transferable transferable = null; try { int start = textArea.getSelectionStart(); int end = textArea.getSelectionEnd(); transferable = new StringSelection(textArea.getText(start, end-start)); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(transferable, null); } catch (BadLocationException e) { System.out.println("Internal error selecting text"); } return transferable; } public void paste(Transferable transferable) { /* DataFlavor[] flavors = transferable.getTransferDataFlavors(); for (int i=0; i start) { String temp = ""; if (start > 0) { temp = textArea.getText(0, start); } int len = textArea.getText().length(); temp += textArea.getText(end, len - end); int caret = textArea.getCaretPosition(); if ((caret > start) && (caret < end)) { caret = start; } else if (caret >= end) { caret -= (end - start); } textArea.setText(temp); textArea.setCaretPosition(caret); } } catch (BadLocationException e) { System.out.println("Internal error deleting selection"); } } public static void main(String[] args) { new CopyPasteExample(); } }