📄 clipboardviewershell.java
字号:
/*
* @author talent_marquis<甜菜侯爵>
* Email: talent_marquis@163.com
* Copyright (C) 2007 talent_marquis<甜菜侯爵>
* All rights reserved.
*/
package marquis.swt.shell;
// import java.awt.datatransfer.Clipboard;
// import java.awt.datatransfer.FlavorEvent;
// import java.awt.datatransfer.FlavorListener;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import marquis.swt.util.ClipBoardManager;
import marquis.swt.util.DisplayUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import com.swtdesigner.SWTResourceManager;
public class ClipBoardViewerShell // implements FlavorListener
{
static String TITLE = "剪贴板查看器 v1.0";
// 自定义常量
private static int CURRENT_STORE_CLIP_NUMBER = 5;
private static int CURRENT_CAPTURE_PER_MILLISECOND = 50;
private static int CURRENT_MENU_STRING_LENGTH = 40;
private int[] currentSetting = { CURRENT_STORE_CLIP_NUMBER,
CURRENT_CAPTURE_PER_MILLISECOND, CURRENT_MENU_STRING_LENGTH };
private int count = 0;
// 剪贴板相关功能类
// private Clipboard clipBoard = null;
String clipsStr[];
private Timer timer;
private Menu menu;
private MenuItem clipsMenu[];
private MenuItem onTopcheckboxMenuItem, checkboxMenuItem, settingMenuItem;
private Label titleLb;
protected Shell shell;
/**
* Launch the application
*
* @param args
*/
public static void main(String[] args)
{
try
{
ClipBoardViewerShell window = new ClipBoardViewerShell();
window.open();
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* Open the window
*/
public void open()
{
final Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
}
// 初始化字符串数组
private void initClipsStr()
{
clipsStr = new String[CURRENT_STORE_CLIP_NUMBER];
for (int i = 0; i < clipsStr.length; i++)
{
clipsStr[i] = (i + 1) + ":" + "<empty>";
}
}
// 设置当前系统设定
private void setCurrentSetting(int[] settings)
{
currentSetting = settings;
CURRENT_STORE_CLIP_NUMBER = settings[0];
CURRENT_CAPTURE_PER_MILLISECOND = settings[1];
CURRENT_MENU_STRING_LENGTH = settings[2];
}
// 创建字符串数组
private void createClipsStr(String[] oldClipsStr)
{
int oldClipsNumber = oldClipsStr.length;
clipsStr = new String[CURRENT_STORE_CLIP_NUMBER];
/*
* 若新的存储条目比原来的大,则截取前几个条目赋给clipsStr数组 反之,则在后面加上<empty>条目
*/
if (oldClipsNumber >= CURRENT_STORE_CLIP_NUMBER)
{
for (int i = 0; i < clipsStr.length; i++)
{
clipsStr[i] = oldClipsStr[i];
}
}
else
{
for (int i = 0; i < clipsStr.length; i++)
{
if (i < oldClipsNumber)
{
clipsStr[i] = oldClipsStr[i];
}
else
{
clipsStr[i] = (i + 1) + ":" + "<empty>";
}
}
}
}
// 初始化菜单栏
private void initMenu()
{
menu = new Menu(shell);
shell.setMenu(menu);
clipsMenu = new MenuItem[CURRENT_STORE_CLIP_NUMBER];
for (int i = 0; i < clipsMenu.length; i++)
{
final int j = i;
clipsMenu[i] = new MenuItem(menu, SWT.NONE);
clipsMenu[i].addSelectionListener(new SelectionAdapter()
{
// 将存储文本拷贝到系统剪切板中
public void widgetSelected(SelectionEvent e)
{
// MenuItem menuItem = (MenuItem) e.getSource();
ClipBoardManager.saveInfoToClipBoard(clipsStr[j]);
//System.out.println(clipsStr[j]);
}
});
if (i < clipsStr.length)
{
clipsMenu[i].setText(getLimitString(clipsStr[i]));
}
else
{
clipsMenu[i].setText((i + 1) + ":" + "<empty>");
}
}
new MenuItem(menu, SWT.SEPARATOR);
// onTopcheckboxMenuItem = new MenuItem(menu, SWT.CHECK);
// onTopcheckboxMenuItem.addSelectionListener(new SelectionAdapter()
// {
// public void widgetSelected(SelectionEvent e)
// {
// if (checkboxMenuItem.getSelection() == false)
// {
// //TODO 没有找到如何设置或者取消窗口总在最前的方法怎么写
// //等找到了再写
// }
// else
// {
//
// }
// }
// });
// onTopcheckboxMenuItem.setSelection(true);
// onTopcheckboxMenuItem.setText("总在最前");
checkboxMenuItem = new MenuItem(menu, SWT.CHECK);
checkboxMenuItem.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
if (checkboxMenuItem.getSelection() == false)
{
stopMonitor();
checkboxMenuItem.setSelection(false);
checkboxMenuItem.setText("监视关闭");
}
else
{
startMonitor();
checkboxMenuItem.setSelection(true);
checkboxMenuItem.setText("监视开启");
}
}
});
checkboxMenuItem.setText("监视开启");
checkboxMenuItem.setSelection(true);
// 弹出设置窗口
settingMenuItem = new MenuItem(menu, SWT.NONE);
settingMenuItem.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
int[] settings = null;
settings = (int[]) new SettingDialog(shell, currentSetting)
.open();
if (settings == null)
{
return;
}
else
{
setCurrentSetting(settings);
createMenu();
}
}
});
settingMenuItem.setText("设置");
final MenuItem clearMenuItem = new MenuItem(menu, SWT.NONE);
clearMenuItem.setText("清除");
clearMenuItem.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
clearAll();
}
});
new MenuItem(menu, SWT.SEPARATOR);
final MenuItem aboutMenuItem = new MenuItem(menu, SWT.NONE);
aboutMenuItem.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
new AboutDialog(shell).open();
}
});
aboutMenuItem.setText("关于");
// 退出选项
final MenuItem exitMenuItem = new MenuItem(menu, SWT.NONE);
exitMenuItem.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
System.exit(0);
}
});
exitMenuItem.setText("退出");
titleLb.setMenu(menu);
}
// 获取限定长度字符
private String getLimitString(String str)
{
if (str.length() < CURRENT_MENU_STRING_LENGTH )
{
return str;
}
else
{
return str.substring(0, CURRENT_MENU_STRING_LENGTH) + "...";
}
}
// 启动剪贴板监视器
public void startMonitor()
{
settingMenuItem.setEnabled(true);
timer.start();
}
// 暂停剪贴板监视器
public void stopMonitor()
{
settingMenuItem.setEnabled(false);
timer.stop();
}
// 创建菜单栏
private void createMenu()
{
menu.dispose();
createClipsStr(clipsStr);
initMenu();
}
// 清除全部剪贴板信息
private void clearAll()
{
initClipsStr();
count = 0;
for (int i = 0; i < clipsMenu.length; i++)
{
clipsMenu[i].setText(getLimitString(clipsStr[i]));
}
}
/**
* Create contents of the window
*/
protected void createContents()
{
shell = new Shell(SWT.BORDER | SWT.ON_TOP);
shell.setBackground(SWTResourceManager.getColor(192, 192, 192));
shell.addMouseMoveListener(new MouseMoveListener()
{
public void mouseMove(MouseEvent e)
{
int mouseLeftButtonDown = 0x80000;
if (e.stateMask == mouseLeftButtonDown)
{
moveShellWithMouse();
}
}
});
shell.setSize(93, 33);
DisplayUtil.showOnAtMouseLocation(shell);
shell.setText("ClipBoardViewer v1.0");
titleLb = new Label(shell, SWT.NONE);
titleLb.setBackground(SWTResourceManager.getColor(192, 192, 192));
titleLb.addMouseMoveListener(new MouseMoveListener()
{
public void mouseMove(MouseEvent e)
{
int mouseLeftButtonDown = 0x80000;
if (e.stateMask == mouseLeftButtonDown)
{
moveShellWithMouse();
}
}
});
titleLb.setAlignment(SWT.CENTER);
titleLb.setText("ClipBoardViewer");
titleLb.setBounds(0, 5, 85, 13);
// 初始化字符串数组
initClipsStr();
// 初始化菜单
initMenu();
// clipBoard =
// java.awt.Toolkit.getDefaultToolkit().getSystemClipboard();
// clipBoard.addFlavorListener(this);
// 定时器,每隔50毫秒检查一次剪贴板
timer = new Timer(CURRENT_CAPTURE_PER_MILLISECOND, new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
final String clipStr;
try
{
clipStr = ClipBoardManager.loadClipBoardInfo();// clipBoard);
if (clipStr == null || "".equals(clipStr))
{
// System.out.println("clipStr is null");
return;
}
else
{
for (String s : clipsStr)
{
if (clipStr.equals(s))
{
// System.out.println("clipStr is saved");
return;
}
}
Display.getDefault().asyncExec(new Runnable()
{
public void run()
{
if (count <= CURRENT_STORE_CLIP_NUMBER - 1)
{
clipsStr[count] = clipStr;
clipsMenu[count]
.setText(getLimitString(clipStr));
count++;
}
else if (count > CURRENT_STORE_CLIP_NUMBER - 1)
{
count = 0;
}
//System.out.println(count);
}
});
}
}
catch (UnsupportedFlavorException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
});
timer.start();
}
// 令窗体根据鼠标位置移动
private void moveShellWithMouse()
{
// TODO 还是没有达到最想要的效果,需要进一步改进
// mouseX = getMouseLocation().x;
// mouseY = getMouseLocation().y;
DisplayUtil.showOnAtMouseLocation(shell);
}
/*
* public void flavorsChanged(FlavorEvent e) { try { Clipboard clipboard =
* (Clipboard) e.getSource(); Transferable content =
* clipboard.getContents(this); if (content == null) {
* System.out.println("Content is empty!"); return; } if
* (!content.isDataFlavorSupported(DataFlavor.stringFlavor)) {
* System.out.println("StringFlavor not supported!"); return; } try { final
* String clipStr = (String) content
* .getTransferData(DataFlavor.stringFlavor); //
* System.out.println("Content: \"" + data + "\"");
* Display.getDefault().asyncExec(new Runnable() { public void run() { if
* (count < CURRENT_STORE_CLIP_NUMBER) { clipsStr[count] = clipStr;
* clipsMenu[count].setText(clipStr); count++; } else if (count >=
* CURRENT_STORE_CLIP_NUMBER) { count = 0; } System.out.println(count); }
* }); } catch (UnsupportedFlavorException ex_) { ex_.printStackTrace(); }
* catch (IOException ex_) { ex_.printStackTrace(); } } catch
* (IllegalStateException ex) { ex.printStackTrace(); } }
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -