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

📄 monitorpane.java

📁 一个远程控制的java测试程序源代码.转于网上
💻 JAVA
字号:
/*
 * @(#)MonitorPane.java 1.00 2005-9-1
 *
 * Copyright 2005 BeanSoft Studio. All rights reserved.
 * PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package studio.beansoft.remotecontrol;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.util.ArrayList;

import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
 * MonitorPane, this pane monitor screens from server, paint it, and alse capture
 * mouse and keybord events on this pane, save the event(s) in two event queues
 * for transporting to remote server.
 *
 * Chinese documents:
 * 这个面板监视服务器上的屏幕, 画出屏幕, 同时在这个面板上的鼠标和键盘事件, 保存这些事件到
 * 两个事件队列, 用来传输到远程的服务器.
 *
 * @author BeanSoft
 * @version 1.00 2005-9-1
 */
public class MonitorPane extends JPanel {
	/**
	 *
	 * KeyHandler handles keyboard event on this pane, add press and
	 * release event to the key event queue.
	 *
	 * Chinese documents:
	 * 处理这个面板上的键盘事件, 添加按下和松开事件到键盘事件队列.
	 *
	 * @author BeanSoft
	 * @version 1.00 2005-9-2
	 */
	class KeyHandler implements java.awt.event.KeyListener {
		public void keyPressed(java.awt.event.KeyEvent e) {
			getKeyEventQueue().add(e);
		}

		public void keyReleased(java.awt.event.KeyEvent e) {
			getKeyEventQueue().add(e);
		}

		public void keyTyped(java.awt.event.KeyEvent e) {
		}
	}

	/**
	 *
	 * MouseHandler handles mouse event on this pane, add press and
	 * release event to the mouse event queue.
	 *
	 * Chinese documents:
	 * 处理这个面板上的鼠标事件, 添加按下和松开事件到鼠标事件队列.
	 * @author BeanSoft
	 * @version 1.00 2005-9-2
	 */
	class MouseHandler extends java.awt.event.MouseAdapter {
		public void mousePressed(java.awt.event.MouseEvent e) {
			getMouseEventQueue().add(e);
		}

		public void mouseReleased(java.awt.event.MouseEvent e) {
			getMouseEventQueue().add(e);
		}
	}

	/**
	 * Repaint operation implements in a Runnable class, using to repaint in a
	 * swing thread.
	 */
	class RepaintRequester implements Runnable {
		public void run() {
			repaint();
		}
	}

	MediaTracker tracker; // 跟踪图象加载

	/** Used to request a repaint in a thread */
	private Runnable repainter = new RepaintRequester();

	/** The image to display */
	private Image image = null;

	/** Mouse events' queue on this pane */
	private ArrayList mouseEventQueue = new ArrayList();

	/** Keyboard events' queue on this pane */
	private ArrayList keyEventQueue = new ArrayList();

	public MonitorPane() {
		initialize();
	}

	public void paintComponent(Graphics g) {

	}

	public void update(Graphics g) {

	}

	public void paint(Graphics g) {
//		if (!tracker.checkAll()) {
//			return;
//		}

		if (image != null && image.getWidth(this) > 0) {
			g.drawImage(image, 0, 0, this);
		}
	}

	/**
	 * This method initializes this pane.
	 *
	 * @return void
	 */
	private void initialize() {
		tracker = new MediaTracker(this);

		this.setSize(800, 600);
		this.setPreferredSize(new java.awt.Dimension(800, 600));
		this.addKeyListener(new KeyHandler());
		this.addMouseListener(new MouseHandler());
		// Enable keyboard events on pane
		this.setFocusable(true);
		this.setDoubleBuffered(false);
		this.setOpaque(false);
	}

	/**
	 * Return the image currently to be displayed.
	 * @return an Image object
	 */
	public Image getImage() {
		return image;
	}

	/**
	 * Set the image to display, and at the same time change the pane's preferred size to image's size.
	 * Chinese documents:
	 * 设置新的图片来显示, 同时更改面板的最合适大小.
	 * @param image
	 */
	public void setImage(Image img) {
		System.out.println("setImage()" + img);

		if (img != null) {
			tracker.removeImage(this.image, 0);

			this.image = img;

			tracker.addImage(this.image, 0);

			try {
				tracker.waitForID(0);
			} catch (Exception e) {
				// TODO: handle exception
			}
		}

		// Check old size and new size
		if (img != null && img.getWidth(this) > 0 && img.getHeight(this) > 0) {

			Dimension oldPreferredSize = getPreferredSize();
			Dimension newPreferredSize =
				new Dimension(img.getWidth(this), img.getHeight(this));

			if (!oldPreferredSize.equals(newPreferredSize)) {
				this.setPreferredSize(newPreferredSize);
			}
		}

		SwingUtilities.invokeLater(repainter);
	}

	/**
	 * @param eventQueue - an ArrayList of mouse event to set.
	 */
	public void setMouseEventQueue(ArrayList eventQueue) {
		this.mouseEventQueue = eventQueue;
	}

	/**
	 * @return returns an ArrayList of mouse event.
	 */
	public ArrayList getMouseEventQueue() {
		return mouseEventQueue;
	}

	/**
	 *
	 * @return an ArrayList of keyboard event
	 */
	public ArrayList getKeyEventQueue() {
		return keyEventQueue;
	}

	/**
	 *
	 * @param keyEventQueue - an ArrayList of mouse event
	 */
	public void setKeyEventQueue(ArrayList keyEventQueue) {
		this.keyEventQueue = keyEventQueue;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -