我正在嘗試製作一個應該顯示剪貼板內容的小桌面應用程序(如果它是一個字符串)。我已經完成了一個構造函數,它可以很好地工作,現在我只想在文本被複制到操作系統中的剪貼板時調用類似的方法。我很新,所以任何幫助將不勝感激!東西告訴我,我應該使用中斷以某種方式...當剪貼板的內容被改變時調用一個方法
package pasty;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class PastyFrame implements KeyListener {
String currentClipboardString;
JLabel clipboardLabel = new JLabel();
public PastyFrame() {
JFrame frame = new JFrame();
frame.setVisible(true);
try {
currentClipboardString = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
} catch (UnsupportedFlavorException | IOException ex) {
Logger.getLogger(PastyFrame.class.getName()).log(Level.SEVERE, null, ex);
currentClipboardString = "";
}
if (currentClipboardString.isEmpty()) {
currentClipboardString = "The clipboard is empty";
}
frame.setSize(400, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLayout(new FlowLayout());
clipboardLabel.setText(currentClipboardString);
frame.add(clipboardLabel);
}
+1打我:P ... – MadProgrammer
我不知道這真的對我的作品:從我的實驗,似乎偵聽器時(例如),我首先選擇和複製文本響應..但如果我再複製一些更多的文本,聽衆不會觸發。這並不奇怪,因爲看起來你正在等待FLAVOR改變。可能的解決辦法可能是在每次事件後清空剪貼板? –
@mikerodent - 只要您使用不同的應用程序從剪貼板複製,事件就會觸發。只要你使用相同的應用程序,事件只會觸發一次。 – jamie