2013-04-22 4 views
0
내가 자바 응용 프로그램을 실행에 이벤트를 할 수있는 창에서 CRTL + c 또는 마우스 오른쪽 버튼으로 클릭 복사와 같은 이벤트를 가져올 지

, 누군가 복사 텍스트 경우 의미자바 응용 프로그램

에 창에 복사 동작을 추가, 그것은 자바 응용 프로그램 텍스트 영역에 붙여 넣어야합니다 ...

나는 자바 응용 프로그램을 만들었으며 주 방법을 통해 인수를 사용할 수 있습니다.

하지만

+0

[클립 보드를 통한 텍스트 전송] (https://blogs.oracle.com/JavaFundamentals/entry/transferring_text_through_the_clipboard) – MadProgrammer

+0

에서 이미 수행 한 작업을 클립 보드에서 가져 오는 것으로 시작할 수 있지만 그 이벤트는 자바 창에서만 작업, 나는 자바 어플리케이션을 트리거하기 위해 윈도우에서 그 이벤트를 원한다. 뭔가 레지스트리와 관련이있다 !! – anshulkatta

답변

2

가장 간단한 방법은 Toolkit.getSystemClipboard

변경이 작업을 수행하는 방법은 두 가지가 있습니다을 모니터하는 것입니다 .. 자바에 창에서 이벤트를 트리거하는 방법에 대해 설명합니다. 당신은 DataFlavour에 대한 변경 사항을 모니터링 할 수 있지만, 이것은 단지 도움이 될 것입니다 경우 데이터 맛의 변화가 아닌 컨텐츠 및/또는 클립 보드의 내용을 모니터링하고 콘텐츠 변경 때보기를 업데이트 할 수 ...

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Toolkit; 
import java.awt.datatransfer.Clipboard; 
import java.awt.datatransfer.DataFlavor; 
import java.awt.datatransfer.FlavorEvent; 
import java.awt.datatransfer.FlavorListener; 
import java.awt.datatransfer.Transferable; 
import java.awt.datatransfer.UnsupportedFlavorException; 
import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class ClipboardMonitor { 

    public static void main(String[] args) { 
     new ClipboardMonitor(); 
    } 

    public ClipboardMonitor() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private JTextArea textArea; 

     public TestPane() { 
      textArea = new JTextArea(10, 10); 
      setLayout(new BorderLayout()); 
      add(new JScrollPane(textArea)); 
      Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(new FlavorListener() { 
       @Override 
       public void flavorsChanged(FlavorEvent e) { 
        setText(getClipboardContents()); 
       } 
      }); 
      Thread t = new Thread(new ContentsMonitor()); 
      t.setDaemon(true); 
      t.start(); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

     protected String getClipboardContents() { 
      String text = null; 
      Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
      if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) { 
       try { 
        Transferable contents = clipboard.getContents(TestPane.this); 
        text = (String) contents.getTransferData(DataFlavor.stringFlavor); 
       } catch (UnsupportedFlavorException | IOException ex) { 
        ex.printStackTrace(); 
       } 
      } 
      return text; 
     } 

     protected void setText(final String text) { 
      SwingUtilities.invokeLater(new Runnable() { 
       @Override 
       public void run() { 
        textArea.setText(text); 
       } 
      }); 
     } 

     public class ContentsMonitor implements Runnable { 

      @Override 
      public void run() { 
       String previous = getClipboardContents(); 
       while (true) { 
        try { 
         Thread.sleep(1000); 
        } catch (InterruptedException ex) { 
        } 
        String text = getClipboardContents(); 
        if (text != null && !text.equals(previous)) { 
         setText(text); 
         previous = text; 
        } 
       } 
      } 
     } 
    } 
} 
+1

위대한, 고마워, 작동, 지금은 내 프로그램에 수정을하고있다 이것을 사용하려면 ... :) – anshulkatta