虚拟鼠标1内部框架 [英] Virtual mouse for 1 internal frame

查看:226
本文介绍了虚拟鼠标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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆