代码一:主要用来启动一个主窗口,负责监听剪切板的活动
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);
}
}
}
效果图: