📄 monitorpane.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 + -