Cut & Paste 자바 클립보드 - 최종명

Projects/CoVNC 2007.01.23 14:23 Posted by soulfree >동네청년<

Cut & Paste
-최종명
java.awt.datatransfer 패키지에서 클립보드를 지원하기 위한 클래스들이 정의되어 있다.
현재 JDK 1.1버전에서 지원되는 클립보드는 아직 초보적인 수준이어서 문자열의
cut, copy, paste 기능만 지원한다. 다른 타입을 위한 기능은 추후에 첨가될 예정이다.

전송될 데이타를 가지고 있는 클래스는 Tansferable 인터페이스를 임플리멘츠해주어야 한다.

DataFlavor 클래스는 클립보드로 전송될 데이타의 MIME 타입을 제공하기 위해 사용된다.

Clipboard 클래스는 cut, copy, paste 기능을 제공한다.


COPY 절차
1. java.awt.Toolkit 클래스의 getSYstemClipboard() 메소드를 이용해서 클립보드를
생성한다.

2. Tansferable 인터페이스를 임플리멘츠한 클래스(ex, StringSelection)를 생성한다.

3. Tansferable 인터페이스를 임플리멘츠한 클래스를 클립보드에 setContents() 메소드를
이용해서 붙인다.
예:
  public void copy(TextField tf)  {
   StringSelection data = new StringSelection(tf.getText());
   Clipboard clipboard = Toolkit().getDefaultToolkit().getSystemClipboard();
   clipboard.setContents(data, data);
  }


PASTE 절차
1. java.awt.Toolkit 클래스의 getSystemClipboard() 메소드를 이용해서 클립보드를
생성한다.

2. 클립보드의 getContents() 메소드를 이용해서 클립보드의 내용을 얻는다.

3. getTransferData() 메소드를 이용해서 원하는 데이타를 얻는다.

4. 얻어진 데이타를 적당한 타입으로 변환한다.
예:
  public void paste(TextField tf)  {
   Clipboard clipboard = Toolkit().getDefaultToolkit().getSystemClipboard();
   Transferable data = clipboard.getContents(this);
   String s;
   try {
     s = (String) (data.getTransferData(DataFlavor.stringFlavor));
   } catch (Exception e) {
     s = data.toString();
   }
   tf.setText(s);
  }


예제: CutNPaste.java 파일


    1  import java.io.*;
    2  import java.awt.*;
    3  import java.awt.datatransfer.*;
    4  import java.awt.event.*;
    5  
    6
    7  public class CutNPaste extends Frame implements ActionListener {
    8      TextField tf;
    9      TextArea ta;
   10      String  selection = "";
   11
   12      public static void main (String args[]) {
   13          new CutNPaste().show();
   14      }
   15
   16      public CutNPaste() {
   17          super("Cut & Paste Example");
   18          add(tf = new TextField("클립보드 예제 프로그램입니다."), "North");
   19          add(ta = new TextArea(), "Center");
   20          MenuBar mb = new MenuBar();
   21          mb.add(makeEditMenu());
   22          setMenuBar(mb);
   23          setSize(250, 250);
   24      }
   25
   26      Menu makeEditMenu() {
   27          Menu editMenu = new Menu("Edit");
   28          MenuItem mi = new MenuItem("Cut");
   29          mi.addActionListener(this);
   30          editMenu.add(mi);
   31          mi = new MenuItem("Copy");
   32          mi.addActionListener(this);
   33          editMenu.add(mi);
   34          mi = new MenuItem("Paste");
   35          mi.addActionListener(this);
   36          editMenu.add(mi);
   37          mi = new MenuItem("Clear");
   38          mi.addActionListener(this);
   39          editMenu.add(mi);
   40  
   41          return editMenu;
   42      }
   43  
   44      public void actionPerformed (ActionEvent evt) {
   45          Clipboard clipboard = getToolkit().getSystemClipboard();
   46          String cmd = evt.getActionCommand();
   47          if (cmd.equalsIgnoreCase("copy")) {
   48              selection = tf.getSelectedText();
   49              if(selection == null || selection.length() == 0)
   50                  selection = tf.getText();
   51              StringSelection data = new StringSelection(selection);
   52              clipboard.setContents(data, data);
   53          } else if (cmd.equalsIgnoreCase("clear")) {
   54              tf.setText("");
   55          } else if (cmd.equalsIgnoreCase("paste")) {
   56              Transferable clipData = clipboard.getContents(this);
   57              String s;
   58              try {
   59                  s = (String)(clipData.getTransferData(DataFlavor.stringFlavor));
   60              } catch (Exception e) {
   61                  s = e.toString();
   62              }
   63              ta.append(s+"\n");
   64          } else if (cmd.equalsIgnoreCase("cut")) {
   65              StringSelection data = new StringSelection(tf.getText());
   66              clipboard.setContents(data, data);
   67              tf.setText("");
   68          }
   69      }
   70  }