一个简单的剪切板记录器

代码一:主要用来启动一个主窗口,负责监听剪切板的活动

package com.dyn;

import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.util.ArrayList;
import java.util.List;

public class Test01 extends JFrame {
    public static List<String> list = new ArrayList<>();

    public Test01() {
        super("截切版");
        JButton button = new JButton("按钮");
        button.addActionListener(e -> new ShearPlate());
        add(button);


        setBounds(300, 300, 300, 300);

        //设置窗口是否可以关闭
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

        String str = "";
        while (true) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            String read = read();
            list.remove(read);
            list.add(read);
            if (list.size() > 20) {
                list.remove(list.get(1));
            }

        }
    }

    public static void main(String[] args) {


        new Test01();

    }

    public static String read() {
        String ret = "";
        Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
        // 获取剪切板中的内容
        Transferable clipTf = sysClip.getContents(null);

        if (clipTf != null) {
            // 检查内容是否是文本类型
            if (clipTf.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                try {
                    ret = (String) clipTf
                            .getTransferData(DataFlavor.stringFlavor);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return ret;
    }
}

代码二:用来显示剪切板的内容

package com.dyn;

import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.util.ArrayList;
import java.util.List;

/*
主界面添加这些信息

public static List<String> list = new ArrayList<>();

String str = "";
while (true) {
 try {
     Thread.sleep(300);
 } catch (InterruptedException e) {
     throw new RuntimeException(e);
 }
 String read = read();
 list.remove(read);
 list.add(read);
if (list.size() > 20) {
    list.remove(list.get(1));
}

 */

/**
 * 剪切板
 */
public class ShearPlate extends JFrame {
    public static int index = 0;
    // 设置集合存储按钮
    public static ArrayList<JButton> jButtons = new ArrayList<>();

    public ShearPlate() {
        // 设置索引
        index = 0;
        // 设置绝对布局
        setLayout(null);

        // 批量添加按钮
//        setButton();

        // 设置滚动条
        JScrollBar jScrollBar = new JScrollBar(JScrollBar.VERTICAL, 0, 20, 0, 100);
        // 设置滚条大小
        jScrollBar.setBounds(300, 0, 20, 450);
        // 设置滚动条滚动触发的方法
        jScrollBar.addAdjustmentListener(e -> {
            // 滚动条滚动,按钮移动
            jButtons.forEach(v -> v.setLocation(20, v.getY() + (ShearPlate.index - e.getValue()) * 10));
            // 记录滚动条位置判断是上还是下
            ShearPlate.index = e.getValue();
        });
        // 添加滚动条到窗体
        add(jScrollBar);

        addWindowFocusListener(new WindowFocusListener() {

            @Override
            public void windowGainedFocus(WindowEvent e) {
                // 批量添加按钮
                setButton();
            }

            @Override
            public void windowLostFocus(WindowEvent e) {
                
            }

        });

        // 设置窗体参数
        setBounds(300, 300, 340, 500);
        //设置窗口是否可以关闭
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        // 设置窗体可使
        setVisible(true);
    }

    public void setButton() {
        jButtons.forEach(e -> remove(e));
        jButtons = new ArrayList<>();
        // 设置第一个按钮的y
        int y = 20;
        // 将文本转为按钮的文本
        List<String> list = Test01.list;
        for (int i = list.size() - 1; i >= 0; i--) {
            String s = list.get(i);
            JButton s1 = new JButton(s);
            s1.addActionListener(e -> {
                Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
                StringSelection strSel = new StringSelection(s);
                cb.setContents(strSel, null);
            });
            jButtons.add(s1);
            s1.setBounds(20, y, 260, 50);
            y += 60;
            add(s1);
        }
    }
}

效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值