⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clipboardviewershell.java

📁 这是基于java开发的编程
💻 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 + -