我已經完成了我的研究,沒有找到有用的結果。Java剪貼板作爲堆棧覆蓋覆蓋
這就是交易,我正在寫一個'新'剪貼板,它像堆棧而不是'區域'一樣工作。我很勇敢或愚蠢地在Java中這樣做。到目前爲止,在我的測試中,看看這是否可能,我設法創建了這個堆棧行爲。我得到的唯一問題是,有時候,主要是當我粘貼堆棧頂部(彈出操作)時,它不彈出或由於其他原因粘貼兩次。
例子: 如果我複製此三個字:卡洛斯,盧卡斯,伊斯特伍德 堆棧剪貼板的行爲像這樣在貼:伊斯特伍德,伊斯特伍德,盧卡斯,卡洛斯
我使用JNativeHooks讀取系統按鍵並確定用戶何時正在粘貼。 我認爲正在發生的事情是,該系統是我的代碼粘貼前...嗯,這裏是代碼無論如何(這是一個測試,這可以解釋爲什麼它是不好評論):
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.Transferable;
import java.util.Stack;
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.NativeInputEvent;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
public class Test3 implements NativeKeyListener {
Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
Stack<Transferable> clipStack = new Stack<>();
public static void main(String[] args) {
try {
GlobalScreen.registerNativeHook();
} catch (NativeHookException ex) {
System.err
.println("There was a problem registering the native hook.");
System.err.println(ex.getMessage());
System.exit(1);
}
Test2 t2 = new Test2();
// Construct the example object and initialze native hook.
GlobalScreen.getInstance().addNativeKeyListener(t2);
}
@Override
public void nativeKeyPressed(NativeKeyEvent ev) {
// Copy
if (ev.getKeyCode() == NativeKeyEvent.VK_C
&& NativeInputEvent.getModifiersText(ev.getModifiers()).equals(
"Ctrl")) {
// Clip the pop
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
clipStack.push(sysClip.getContents(null));
System.out.println("Ctrl+C : Stack(" + clipStack.size() + ")");
}
// Paste
if (ev.getKeyCode() == NativeKeyEvent.VK_V
&& NativeInputEvent.getModifiersText(ev.getModifiers()).equals(
"Ctrl")) {
// Clip the pop
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (clipStack.size() > 1) {
sysClip.setContents(clipStack.pop(), null);
} else
sysClip.setContents(clipStack.peek(), null);
System.out.println("Ctrl+V : Stack(" + clipStack.size() + ")");
}
}
@Override
public void nativeKeyReleased(NativeKeyEvent e) {
}
@Override
public void nativeKeyTyped(NativeKeyEvent e) {
}
}
謝謝!我解決了這個問題,有一個主題解釋了我是如何在[鏈接](http://www.thejavahub.net/thejavahub/index.php?topic=2601.0)上做到的。 –
嘿,我看到了你的解決方案。很高興你找到了解決方案。但是,我想知道如果你不介意,我是否可以得到你的源代碼。我只想提及它。爲了提高知識你知道......! –
我很快就會發布到github。 –