支付宝网站接口申请,北京做企业网站,安云自助建站系统源码,wordpress 搜索 很慢工作中经常有复制的诉求#xff0c;当多次复制的时候#xff0c;去找之前复制的内容就比较麻烦。市面上的要不是不好用#xff0c;要不是就是不免费。于是打算手搓一个记录复制记录的软件#xff0c;方便快速找到之前复制内容#xff0c;效果还是很不错。直接贴代码 下面是…工作中经常有复制的诉求当多次复制的时候去找之前复制的内容就比较麻烦。市面上的要不是不好用要不是就是不免费。于是打算手搓一个记录复制记录的软件方便快速找到之前复制内容效果还是很不错。直接贴代码 下面是完整版代码 import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.LinkedList;
import java.util.concurrent.TimeUnit;public class ClipboardHistory extends JFrame {private static final int MAX_HISTORY 100;private final DefaultListModelString listModel new DefaultListModel();private final LinkedListString history new LinkedList();private final JListString historyList new JList(listModel);public ClipboardHistory() {setTitle(剪贴板历史记录器);setDefaultCloseOperation(EXIT_ON_CLOSE);setSize(500, 400);setLocationRelativeTo(null);JScrollPane scrollPane new JScrollPane(historyList);JButton copyBtn new JButton(复制到剪贴板);copyBtn.addActionListener(e - copySelectedToClipboard());JButton deleteBtn new JButton(删除选中内容);deleteBtn.addActionListener(e - deleteSelectedItem());JPanel btnPanel new JPanel();btnPanel.add(copyBtn);btnPanel.add(deleteBtn);JPanel panel new JPanel(new BorderLayout());panel.add(scrollPane, BorderLayout.CENTER);panel.add(btnPanel, BorderLayout.SOUTH);add(panel);// 鼠标双击复制historyList.addMouseListener(new MouseAdapter() {Overridepublic void mouseClicked(MouseEvent evt) {if (evt.getClickCount() 2) {copySelectedToClipboard();}}});// 剪贴板监听线程new Thread(this::watchClipboard).start();}private void watchClipboard() {Clipboard clipboard Toolkit.getDefaultToolkit().getSystemClipboard();Transferable prev null;while (true) {try {Transferable curr clipboard.getContents(null);if (curr ! null curr.isDataFlavorSupported(DataFlavor.stringFlavor)) {String data (String) curr.getTransferData(DataFlavor.stringFlavor);if (!data.trim().isEmpty() (prev null || !data.equals(getTransferableString(prev)))) {addHistory(data);prev curr;}}TimeUnit.MILLISECONDS.sleep(500);} catch (Exception e) {// 忽略异常}}}private String getTransferableString(Transferable t) {try {return t ! null t.isDataFlavorSupported(DataFlavor.stringFlavor)? (String) t.getTransferData(DataFlavor.stringFlavor) : null;} catch (Exception e) {return null;}}private void addHistory(String text) {SwingUtilities.invokeLater(() - {if (history.contains(text)) {return; }// 去重history.addFirst(text);if (history.size() MAX_HISTORY) {history.removeLast();}refreshList();});}private void refreshList() {listModel.clear();for (String s : history){ listModel.addElement(s);}}private void copySelectedToClipboard() {String selected historyList.getSelectedValue();if (selected ! null) {StringSelection sel new StringSelection(selected);Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sel, null);}}private void deleteSelectedItem() {int idx historyList.getSelectedIndex();if (idx 0) {String item listModel.getElementAt(idx);history.remove(item);refreshList();// 维持选择状态if (idx listModel.size()) {historyList.setSelectedIndex(idx);} else if (!listModel.isEmpty()) {historyList.setSelectedIndex(listModel.size() - 1);}}}public static void main(String[] args) {SwingUtilities.invokeLater(() - new ClipboardHistory().setVisible(true));}
}主要功能说明
可以自动记录前100条可以自行调整复制时的内容去重的。可以“删除选中内容”可以复制选择的内容
如何使用 1.创建一个Java 文件然后直接复制上面代码直接在idea运行就行。文件名称要和ClipboardHistory一样当然你也可以同时修改名称。 2.打包后在classpath的目录直接执行nohup java -cp . com.example.demo.tool.ClipboardHistory app.log 21 这样就可以后台一直运行直到你关机。
效果如下