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

📄 screenpanel.java

📁 桌面控制的程序啊啊 啊啊 啊啊 啊啊 啊啊 啊啊 啊啊啊
💻 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 + -