📄 screenpanel.java
字号:
// Decompiled by DJ v3.9.9.91 Copyright 2005 Atanas Neshkov Date: 3/8/2007 1:18:37 PM
// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: ScreenPanel.java
package client;
import common.KeyInput;
import common.MouseInput;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.Socket;
import javax.swing.JPanel;
public class ScreenPanel extends JPanel
implements Runnable
{
public ScreenPanel()
{
isRunning = true;
noImage = "\u6CA1\u6709\u63A5\u6536\u5230\u56FE\u8C61\u4FE1\u606F";
enableEvents(16L);
enableEvents(32L);
enableEvents(0x20000L);
enableEvents(8L);
setPreferredSize(new Dimension(1024, 768));
}
public ScreenPanel(String pos[])
{
this();
try
{
socket = new Socket(pos[0], Integer.parseInt(pos[1]));
input = new ObjectInputStream(socket.getInputStream());
output = new ObjectOutputStream(socket.getOutputStream());
(new Thread(this)).start();
}
catch(Exception exception) { }
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
if(image != null)
{
g2.drawImage(image, 0, 0, getWidth(), getHeight(), null);
} else
{
if(fm == null)
{
fm = g.getFontMetrics();
computeStringInfo();
}
g2.drawString(noImage, (getWidth() - noImageWidth) / 2, (getHeight() - fontHeight) / 2 + fontAscent);
}
}
public boolean isFocusTraversable()
{
return true;
}
public boolean isFocusable()
{
return true;
}
private void computeStringInfo()
{
noImageWidth = fm.stringWidth(noImage);
fontHeight = fm.getHeight();
fontAscent = fm.getAscent();
}
public void exit()
{
isRunning = false;
}
public void run()
{
try
{
int i = 0;
while(isRunning)
{
readImage();
repaint();
if(++i == 10)
{
Runtime.getRuntime().gc();
Runtime.getRuntime().gc();
Runtime.getRuntime().gc();
Runtime.getRuntime().gc();
Runtime.getRuntime().gc();
i = 0;
} else
{
Thread.sleep(100L);
}
}
}
catch(Exception e)
{
image = null;
noImage = "\u8FDE\u63A5\u4E22\u5931\uFF0C\u65E0\u6CD5\u63A5\u6536\u56FE\u8C61\u4FE1\u606F";
computeStringInfo();
repaint();
}
}
private void readImage()
throws Exception
{
int compress[] = (int[])input.readObject();
int w = compress[0];
int h = compress[1];
startX = compress[2];
startY = compress[3];
endX = compress[4];
endY = compress[5];
int maxX = compress[4];
int maxY = compress[5];
if(image == null || w != image.getWidth() || h != image.getHeight())
{
setPreferredSize(new Dimension(w, h));
image = new BufferedImage(w, h, 6);
}
int compressLen = compress.length;
int x = compress[2];
int y = compress[3];
for(int i = 6; i < compressLen; i++)
if(compress[i] < 0)
{
image.setRGB(x++, y, compress[i]);
if(x == maxX)
{
x = compress[2];
y++;
}
} else
{
int rgb = compress[i + 1];
for(int n = compress[i] - 1; n >= 0; n--)
{
try
{
image.setRGB(x++, y, rgb);
}
catch(Exception e)
{
System.out.println("x = " + x + "; y = " + y);
}
if(x == maxX)
{
x = compress[2];
y++;
}
}
i++;
}
}
protected void processMouseMotionEvent(MouseEvent e)
{
Object order = null;
switch(e.getID())
{
case 503:
case 506:
order = new MouseInput(503, e.getX(), e.getY());
// fall through
case 504:
case 505:
default:
writeOrder(order);
break;
}
}
protected void processMouseWheelEvent(MouseWheelEvent e)
{
Object order = null;
switch(e.getID())
{
case 507:
order = new MouseInput(507, e.getWheelRotation());
break;
}
writeOrder(order);
}
protected void processMouseEvent(MouseEvent e)
{
Object order = null;
switch(e.getID())
{
case 501:
order = new MouseInput(501, e.getModifiers());
break;
case 502:
order = new MouseInput(502, e.getModifiers());
break;
case 503:
System.out.println("mouse moved");
order = new MouseInput(503, e.getX(), e.getY());
break;
}
writeOrder(order);
}
protected void processKeyEvent(KeyEvent e)
{
if(e.getID() == 401 || e.getID() == 402)
writeOrder(new KeyInput(e.getID(), e.getKeyCode()));
}
private void writeOrder(Object order)
{
try
{
if(order != null)
output.writeObject(order);
}
catch(Exception exception) { }
}
private volatile boolean isRunning;
private int startX;
private int startY;
private int endX;
private int endY;
private Socket socket;
private static final int HEAD_LEN = 6;
private int noImageWidth;
private int fontHeight;
private int fontAscent;
private String noImage;
private BufferedImage image;
private ObjectOutputStream output;
private ObjectInputStream input;
private FontMetrics fm;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -