, 누군가 복사 텍스트 경우 의미자바 응용 프로그램
에 창에 복사 동작을 추가, 그것은 자바 응용 프로그램 텍스트 영역에 붙여 넣어야합니다 ...
나는 자바 응용 프로그램을 만들었으며 주 방법을 통해 인수를 사용할 수 있습니다.
하지만
, 누군가 복사 텍스트 경우 의미자바 응용 프로그램
에 창에 복사 동작을 추가, 그것은 자바 응용 프로그램 텍스트 영역에 붙여 넣어야합니다 ...
나는 자바 응용 프로그램을 만들었으며 주 방법을 통해 인수를 사용할 수 있습니다.
하지만
가장 간단한 방법은 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;
}
}
}
}
}
}
위대한, 고마워, 작동, 지금은 내 프로그램에 수정을하고있다 이것을 사용하려면 ... :) – anshulkatta
[클립 보드를 통한 텍스트 전송] (https://blogs.oracle.com/JavaFundamentals/entry/transferring_text_through_the_clipboard) – MadProgrammer
에서 이미 수행 한 작업을 클립 보드에서 가져 오는 것으로 시작할 수 있지만 그 이벤트는 자바 창에서만 작업, 나는 자바 어플리케이션을 트리거하기 위해 윈도우에서 그 이벤트를 원한다. 뭔가 레지스트리와 관련이있다 !! – anshulkatta