虚拟鼠标1内部框架 [英] Virtual mouse for 1 internal frame
本文介绍了虚拟鼠标1内部框架的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想使虚拟鼠标(指针),可以由java的只是控制。
但我不能找到任何地方在那里我可以做到这一点?
我希望把它画一个红点鼠标。
我希望它tosimulatie所有鼠标事件。
解决方案
我想打一个虚拟鼠标(指针),可通过Java只能控制。
可能的方向之一
进口的javax.swing *。
java.awt.event中导入*。
进口java.awt.Graphics;
进口java.awt.Color中;
进口java.awt.Component中;公共类SSCCE { 私人的JFrame componentsFrame =新的JFrame();
私人的JFrame remoteFrame =新的JFrame();
私人诠释lastMouseX,lastMouseY;
最终的JPanel面板=新JPanel(); 公共SSCCE(){
panel.add(的新的JButton(A键));
panel.add(新JComboBox中(新的String [] {A,二合一,盒子}));
panel.add(新JSlider的());
panel.add(新JList中(新的String [] {A,列表}));
panel.add(新JCheckBox的(复选框));
componentsFrame.add(面板);
componentsFrame.setGlassPane(新JPanel(){ 私有静态最后的serialVersionUID长1L =; @覆盖
公共无效的paintComponent(图形G){
g.setColor(Color.red);
g.drawLine(lastMouseX - 8,lastMouseY,lastMouseX + 8,lastMouseY);
g.drawLine(lastMouseX,lastMouseY - 8,lastMouseX,lastMouseY + 8);
} @覆盖
公共布尔isOpaque(){
返回false;
} @覆盖
公共布尔可见性(){
返回true;
}
});
componentsFrame.setEnabled(假);
componentsFrame.pack();
componentsFrame.setVisible(真);
//
MouseAdapter mouseImpl =新MouseAdapter(){ 私有组件最后pressed; @覆盖
公共无效鼠标pressed(的MouseEvent E){
redirectMouseEvent(E);
} @覆盖
公共无效的mouseReleased(的MouseEvent E){
redirectMouseEvent(E);
} @覆盖
公共无效的mouseClicked(的MouseEvent E){
redirectMouseEvent(E);
} @覆盖
公共无效的mouseMoved(的MouseEvent E){
redirectMouseEvent(E);
} @覆盖
公共无效的mouseDragged(的MouseEvent E){
redirectMouseEvent(E);
} 私人无效redirectMouseEvent(的MouseEvent E){
组分redirectTo = SwingUtilities.getDeepestComponentAt(面板,e.getX(),e.getY());
如果(e.getID()== MouseEvent.MOUSE_ preSSED){
最后pressed = redirectTo;
}否则如果(e.getID()== MouseEvent.MOUSE_DRAGGED || e.getID()== MouseEvent.MOUSE_RELEASED){
redirectTo =最后pressed;
}
如果(redirectTo!= NULL){
lastMouseX = e.getX();
lastMouseY = e.getY();
panel.repaint(); //这条线是刚刚更新玻璃板
E = SwingUtilities.convertMouseEvent(面板,电子,redirectTo);
。java.awt.Toolkit.getDefaultToolkit()getSystemEventQueue()事件后(E)。
}
}
};
。remoteFrame.getContentPane()addMouseListener将(mouseImpl);
。remoteFrame.getContentPane()addMouseMotionListener(mouseImpl);
remoteFrame.setSize(componentsFrame.getSize());
remoteFrame.setLocation(0,componentsFrame.getY()+ componentsFrame.getHeight());
remoteFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
remoteFrame.setVisible(真);
} 公共静态无效的主要(字串[] args){
SwingUtilities.invokeLater(Runnable的新(){ @覆盖
公共无效的run(){
SSCCE SSCCE =新SSCCE();
}
});
}
}
I want to make a virtual mouse(pointer), that can be controlled by java only. But i cant find anywhere where i can do this? I want to make it draw a red dot as mouse. And i want it tosimulatie all mouse events.
解决方案
I want to make a virtual mouse(pointer), that can be controlled by java only.
one of possible directions
import javax.swing.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Component;
public class SSCCE {
private JFrame componentsFrame = new JFrame();
private JFrame remoteFrame = new JFrame();
private int lastMouseX, lastMouseY;
final JPanel panel = new JPanel();
public SSCCE() {
panel.add(new JButton("A Button"));
panel.add(new JComboBox(new String[]{"A", "Combo", "Box"}));
panel.add(new JSlider());
panel.add(new JList(new String[]{"A", "List"}));
panel.add(new JCheckBox("Check Box"));
componentsFrame.add(panel);
componentsFrame.setGlassPane(new JPanel() {
private static final long serialVersionUID = 1L;
@Override
public void paintComponent(Graphics g) {
g.setColor(Color.red);
g.drawLine(lastMouseX - 8, lastMouseY, lastMouseX + 8, lastMouseY);
g.drawLine(lastMouseX, lastMouseY - 8, lastMouseX, lastMouseY + 8);
}
@Override
public boolean isOpaque() {
return false;
}
@Override
public boolean isVisible() {
return true;
}
});
componentsFrame.setEnabled(false);
componentsFrame.pack();
componentsFrame.setVisible(true);
//
MouseAdapter mouseImpl = new MouseAdapter() {
private Component lastPressed;
@Override
public void mousePressed(MouseEvent e) {
redirectMouseEvent(e);
}
@Override
public void mouseReleased(MouseEvent e) {
redirectMouseEvent(e);
}
@Override
public void mouseClicked(MouseEvent e) {
redirectMouseEvent(e);
}
@Override
public void mouseMoved(MouseEvent e) {
redirectMouseEvent(e);
}
@Override
public void mouseDragged(MouseEvent e) {
redirectMouseEvent(e);
}
private void redirectMouseEvent(MouseEvent e) {
Component redirectTo = SwingUtilities.getDeepestComponentAt(panel, e.getX(), e.getY());
if (e.getID() == MouseEvent.MOUSE_PRESSED) {
lastPressed = redirectTo;
} else if (e.getID() == MouseEvent.MOUSE_DRAGGED || e.getID() == MouseEvent.MOUSE_RELEASED) {
redirectTo = lastPressed;
}
if (redirectTo != null) {
lastMouseX = e.getX();
lastMouseY = e.getY();
panel.repaint(); //this line is just to update the glass pane
e = SwingUtilities.convertMouseEvent(panel, e, redirectTo);
java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(e);
}
}
};
remoteFrame.getContentPane().addMouseListener(mouseImpl);
remoteFrame.getContentPane().addMouseMotionListener(mouseImpl);
remoteFrame.setSize(componentsFrame.getSize());
remoteFrame.setLocation(0, componentsFrame.getY() + componentsFrame.getHeight());
remoteFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
remoteFrame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SSCCE sSCCE = new SSCCE();
}
});
}
}
这篇关于虚拟鼠标1内部框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文