1. 屏幕图像传送中,我对不同大小屏幕处理策略
远处桌面控制软件,听起来很神秘,其实,就是在服务器和客户机之间传送屏幕截图。这样,引出了一个问题——不同电脑的屏幕大小不一定相同。而远程控制之所以能够实现,无非就是传送鼠标事件、键盘事件的相关数据。鼠标事件的数据,最重要的是鼠标移动中的坐标的传送。这样一来,坐标的相对性就会造成远程控制中鼠标操作的不准确行。举个简单的例子:客户端界面上会有一个鼠标监听器,鼠标移动时,获取一个一个的坐标(x,y),然后传送给服务器。这个坐标是相对于客户端的界面而言,传到服务器后,服务器解析出这个坐标,用Robot 对象驱动鼠标移动,一定会移动到客户端鼠标移动的位置么?很明显,不一定会。对于这个问题,其实很容易解决,客户端和服务器对于每一个鼠标移动的坐标做一定的计算处理就可以了。但是,计算起来很麻烦,一个一个的像素,要怎么计算的准确,说实话我不知道。
客户端收到服务器发来的每一个图片,要显示在界面上,用户才可以看到。我可以把图片显示在一个组件上(JLabel),然后给Jlabel添加鼠标监听器,这样一来,每次捕获的坐标就是相对于服务器桌面的(0,0)点的,省去了计算的麻烦。但是,还有一个问题,如何显示完全的桌面截屏图像?我做了这样的处理:创建一个JscrollPane 对象,把Jlabel 添加到 JscrollPane 中,在界面上添加 这个滚动面板,然后鼠标监听器也加到滚动面板。
测试代码:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
public class Test {
public static void main(String[] args) {
Test test=new Test();
test.showUI();
}
private void showUI(){
javax.swing.JFrame jFrame=new JFrame("Test");
jFrame.setSize(800, 600);
jFrame.setLayout(null);
javax.swing.JLabel jLabel=new JLabel();
// jLabel.setIcon(传入一个图片);
javax.swing.JScrollPane scrollPane=createScroll(jLabel);
scrollPane.setBounds(20,20,600,500);
jFrame.add(scrollPane);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(3);
}
/**
* 创建 滚动面板 ,包含 jComponent 组件视图
* @param jComponent 滚动面板中,要添加滚动条的 视图
* @return 滚动面板
*/
private javax.swing.JScrollPane createScroll(javax.swing.JComponent jComponent) {
javax.swing.JPanel jPanel = new javax.swing.JPanel();
jPanel.add(jComponent);
javax.swing.JScrollPane jScrollPane = new JScrollPane(jPanel,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
return jScrollPane;
}
}
2. 鼠标适配器使用的问题
鼠标监听器有三种:MouseListener、MouseMotionListener、MouseWheelListener。他们实现不同的鼠标事件的监听。
1.MouseListener 接口定义了方法:鼠标点击、按下、释放、进入、退出。
源代码:
public interface MouseListener extends EventListener {
public void mouseClicked(MouseEvent e);
public void mousePressed(MouseEvent e);
public void mouseReleased(MouseEvent e);
public void mouseEntered(MouseEvent e);
public void mouseExited(MouseEvent e);
}
2.MouseMotionListener 接口定义的方法:鼠标移动和拖拽
源代码:
public interface MouseMotionListener extends EventListener {
public void mouseDragged(MouseEvent e);
public void mouseMoved(MouseEvent e);
}
3.MouseWheelListener 接口定义的方法: 鼠标滚轮的滚动
源代码:
public interface MouseWheelListener extends EventListener {
public void mouseWheelMoved(MouseWheelEvent e);
}
鼠标适配器把鼠标的三中监听器的方法都包罗在里面了。我们使用时,只需要实现自己需要的方法。我在使用中,就只重写了鼠标的按下、释放、移动、滚轮滚动的相关方法。当,添加监听器给组件是,只有一种监听会实现,比如说,按下和释放可以,或者只有移动可以,或者只有滚轮滚动可以。原因在于,给组件添加鼠标监听器是,添加的是MouseListener 或者是MouseWheelListener 还是 MouseMotionListener 。我理解的适配器就是,把我们需要的方法实现,添加MouseListener 就可以。但是,在继承关系中,MouseAdapter实现了MouseMotionListener、Mouselistener 、MouseWheelListener,但是在添加监听器以后,鼠标事件调用方法是,存在一个多态的问题。解决很简单,addMouseMotionListener()、 addMouselistener() 、 addMousewheelListener() ,三个方法都传入你的适配器就OK了。问题虽然很简单,但是对于多态的理解很重要。
最后呢,说说键盘监听吧。其实,键盘监听,不是很明白。我给界面添加KeyListener ,界面只有一个Jlabel 组件式,监听可以实现,但是键盘上有一个 JButton 是,加个界面就没有用,如果这时候把KeyListerner 添加到Button 上,也可以实现监听。对于其中的原因,不是很清楚,有待解决。
分享到:
相关推荐
在IT领域,远程桌面控制是一种常见且实用的技术,它允许用户通过网络访问并操作远端计算机。本项目基于QT和Windows API...对于学习和研究远程桌面控制技术,或者开发类似的跨平台应用,这样的项目具有很高的参考价值。
【VC++编写的远程桌面控制程序】是一种基于微软的Visual C++开发环境,利用MFC(Microsoft Foundation Classes)库构建的客户端/服务器(C/S)架构的软件应用。MFC是微软提供的一套面向对象的类库,它使得开发者能够...
在C#编程环境下,实现无客户端远程桌面功能通常涉及到以下几个关键技术点: 1. **WebRTC(Web Real-Time Communication)**:这是一种在浏览器之间进行实时通信的API,允许用户直接在浏览器中进行音频、视频和数据...
在VB中实现远程桌面控制,主要涉及以下几个关键点: 1. **网络通信**:VB使用Socket类进行网络通信,建立客户端与服务器端的连接。Socket提供了发送和接收数据的基本方法,是实现远程控制的基础。 2. **数据传输**...
在C#和Winform中实现这一功能,我们需要以下几个关键步骤: 1. **网络通信**:首先,我们需要建立一个可靠的网络连接,这通常涉及到TCP/IP协议。C#的`System.Net`命名空间提供了Socket类,可以用来创建客户端和...
【Android应用源码远程桌面连接安卓客户端项目】是一个基于Android平台的开源项目,旨在实现从Android设备远程控制桌面的功能。这个项目对于学习Android应用开发,尤其是远程桌面协议(如RDP、VNC)的实现者来说,...
TightVNC是一款流行的开源远程控制软件,它允许用户通过网络从一台计算机远程访问和控制另一台计算机的桌面。本文将深入探讨TightVNC客户端源码,以及如何使用Visual Studio(VS)进行开发。 首先,我们要理解...
【VB2005编写的远程桌面客户端代码】是一个基于Visual Basic 2005(VB.NET)开发的程序,用于实现对远程计算机的桌面控制功能。VB2005是微软.NET框架下的一个编程环境,它提供了丰富的控件和API,使得开发者能够便捷...
在IT领域,远程桌面控制是一种常见且实用的技术,它允许用户通过网络访问并控制远端计算机的桌面环境。本文将详细讲解如何使用VC++和CSocket类来实现这一功能。 首先,我们需要理解CSocket类。它是MFC(Microsoft ...
标题 "VC 远程桌面控制程序(2010年)" 暗示这是一个使用Visual C++(VC)开发的远程桌面控制软件,可能是基于2010年的技术栈。这种程序允许用户通过网络从一台计算机控制另一台计算机,实现远程操作、管理或监控...
C# RDP(远程桌面协议)的应用通常涉及以下几个关键知识点: 1. **MsTscAx控件**:MsTscAx是Microsoft提供的一个ActiveX控件,用于在.NET环境中实现RDP连接。开发者可以通过添加引用该控件到项目中,然后利用其提供...
在C#中,实现远程桌面控制涉及到以下几个关键知识点: 1. **网络通信**:远程控制的基础是网络通信,通常使用TCP/IP协议族中的套接字(Socket)进行数据传输。套接字提供了低级别的网络连接,可以实现客户端...
它为用户提供了在单一界面下同时管理多个远程桌面连接的功能,极大地提升了IT管理员和开发人员的工作效率。这款工具在IT行业中尤其受到青睐,因为它简化了对多台远程计算机的监控和操作。 RDCMan的主要特点包括: ...
本项目提供了一个基于C#开发的类似"treamviewer"的远程桌面解决方案,其核心亮点在于使用了虚拟显卡技术,实现了高效、稳定的屏幕动态切割与传输。 首先,让我们深入了解"虚拟显卡"的概念。在远程桌面应用中,虚拟...
在实现远程桌面控制的过程中,有几个关键的技术知识点: 1. **网络通信**:C#中通常使用System.Net命名空间下的类进行网络通信,如Socket、TcpClient和TcpListener等。这些类帮助程序建立客户端和服务器之间的连接...
这对于开发自定义的远程桌面解决方案或者优化现有远程控制工具都是很有价值的。 总之,TightVNC 2.6.4源码提供了丰富的学习材料,涵盖了网络编程、图形用户界面、加密安全等多个方面的知识,对于想要提升自己在IT...
2. **安全问题**:远程桌面控制涉及到网络安全,必须确保数据传输的安全性。通常,RDP会使用加密技术,如SSL/TLS,来保护数据不被窃取。此外,防火墙配置和强密码策略也是防止未经授权访问的重要措施。 3. **身份...
远程桌面控制的核心技术主要包括以下几个方面: 1. **网络通信**:易语言远程桌面V1.0首先需要建立两端之间的稳定网络连接。这通常通过TCP/IP协议实现,确保数据的可靠传输。源码中可能包含了创建服务器和客户端...
Java远程桌面程序是一种技术,允许用户通过网络连接到另一台计算机并进行交互操作,类似于Windows自带的远程桌面连接工具。这种技术在系统管理员、开发者和远程协作中非常常见,因为它可以方便地对远程服务器进行...
在这个"远程桌面(你的桌面我作主)附源码"的资源中,我们可能涉及到以下几个关键知识点: 1. **远程桌面协议(RDP)**:远程桌面功能基于微软的远程桌面协议,这是一种专为远程控制设计的协议,能够高效地传输键盘、...