How can I record mouse motions over the entire window?

  • (4 Pages)
  • +
  • « First
  • 2
  • 3
  • 4

48 Replies - 1520 Views - Last Post: 20 June 2020 - 09:37 AM Rate Topic: -----

#46 Sciuriware   User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 83
  • Joined: 17-August 13

Re: How can I record mouse motions over the entire window?

Posted 20 June 2020 - 12:21 AM

I meant: rr does not seem to have any purpose here.

Besides, what is the purpose of 'ggg'?

;JOOP!
Was This Post Helpful? 0
  • +
  • -

#47 idlewild   User is online

  • New D.I.C Head

Reputation: 3
  • Posts: 35
  • Joined: 19-June 20

Re: How can I record mouse motions over the entire window?

Posted 20 June 2020 - 02:07 AM

ggg is to jump to Graphics2D

besides i have noticed even playing around with the Layout changes the way the code behaves
Was This Post Helpful? 0
  • +
  • -

#48 Sciuriware   User is offline

  • D.I.C Head

Reputation: 1
  • View blog
  • Posts: 83
  • Joined: 17-August 13

Re: How can I record mouse motions over the entire window?

Posted 20 June 2020 - 02:38 AM

View Postidlewild, on 20 June 2020 - 10:07 AM, said:

ggg is to jump to Graphics2D

besides i have noticed even playing around with the Layout changes the way the code behaves

Playing around is always useful and a source of ad hoc learning.

So, the line with rr can be deleted?
;JOOP!

P.S.: I can not test this code right away, because I dwell in an other project now.
I will respond in time.
Thanks so far.
;JOOP!
Was This Post Helpful? 0
  • +
  • -

#49 idlewild   User is online

  • New D.I.C Head

Reputation: 3
  • Posts: 35
  • Joined: 19-June 20

Re: How can I record mouse motions over the entire window?

Posted 20 June 2020 - 09:37 AM

rr was superfluous

and with the correct indentation the code i posted is below for your scrutiny


/*
  * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  *   - Redistributions of source code must retain the above copyright
  *     notice, this list of conditions and the following disclaimer.
  *
  *   - Redistributions in binary form must reproduce the above copyright
  *     notice, this list of conditions and the following disclaimer in the
  *     documentation and/or other materials provided with the distribution.
  *
  *   - Neither the name of Oracle or the names of its
  *     contributors may be used to endorse or promote products derived
  *     from this software without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */ 

  import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.event.MouseInputAdapter;

/** An application that requires no other files. */
public class TestCase extends JPanel{
	JButton jb1=new JButton("button 1");
	JButton jb2=new JButton("button 2");
	static double x;static double y;
	static private MyGlassPane myGlassPane;
	JPanel p=this;
	JWindow cas=new JWindow();
	JCheckBox changeButton =
		new JCheckBox("Glass pane \"visible\"");
	/**
	 * Create the GUI and show it.  For thread safety,
	 * this method should be invoked from the
	 * event-dispatching thread.
	 */
	private   void createAndShowGUI() {
		//Create and set up the window.
		//this = new TestCase("TestCase");
		//final TestCase cas=new TestCase();

		//cas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//Start creating and adding components.
		cas.setFocusable(true);
		cas.isBackgroundSet();
		changeButton.setSelected(false);
		//Set up the content pane, where the "main GUI" lives.
		Container contentPane = cas.getContentPane();
		contentPane.setLayout(new FlowLayout());
		//p.add(changeButton);
		p.add(jb1);
		p.add(jb2);
		cas.add(this);
		cas.setSize(400, 400);
		//Set up the menu bar, which appears above the content pane.
		/* JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Menu");
        menu.add(new JMenuItem("Do nothing"));
        cas.add(menu);
        cas.setJMenuBar(menuBar);

        //Set up the glass pane, which appears over both menu bar
        //and content pane and is an item listener on the change
        //button.
        myGlassPane = new MyGlassPane(changeButton, menuBar,
                                      cas.getContentPane());
        changeButton.addItemListener(myGlassPane);
        cas.setGlassPane(myGlassPane);
		 */
		//Show the window.
		//frame.pack();
		jb1.addItemListener(new ItemListener(){
			public void itemStateChanged(ItemEvent e) {
				setVisible(e.getStateChange() == ItemEvent.SELECTED);
			}

		});

		jb2.addMouseMotionListener(new MouseMotionListener(){

			@Override
			public void mouseDragged(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseMoved(MouseEvent arg0) {
				// TODO Auto-generated method stub
				x=arg0.getX();
				y=arg0.getY();
				cas.repaint();
				p.repaint();
				jb1.repaint();
			}

		});



		jb1.addMouseMotionListener(new MouseMotionListener(){

			@Override
			public void mouseDragged(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseMoved(MouseEvent arg0) {
				// TODO Auto-generated method stub
				x=arg0.getX();
				y=arg0.getY();
				cas.repaint();
				p.repaint();
				jb1.repaint();
			}


		});
		p.addMouseMotionListener(new MouseMotionListener(){

			@Override
			public void mouseDragged(MouseEvent arg0) {
				// TODO Auto-generated method stub
				x=arg0.getX();
				y=arg0.getY();
				cas.repaint();
				p.repaint();
			}

			@Override
			public void mouseMoved(MouseEvent arg0) {
				// TODO Auto-generated method stub
				x=arg0.getX();
				y=arg0.getY();
				cas.repaint();
				p.repaint();
			}


		});
		cas.setVisible(true);cas.setSize(800,800);
		cas.addMouseMotionListener(new MouseMotionListener(){


			public void mouseClicked(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			public void mouseEntered(MouseEvent arg0) {
				// TODO Auto-generated method stub
				x=arg0.getX();
				y=arg0.getY();
				cas.repaint();
				repaint();
			}


			public void mouseExited(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}


			public void mousePressed(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			public void mouseReleased(MouseEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseDragged(MouseEvent arg0) {
				// TODO Auto-generated method stub
				x=arg0.getX();
				y=arg0.getY();
				cas.repaint();
				p.repaint();
			}

			@Override
			public void mouseMoved(MouseEvent arg0) {
				// TODO Auto-generated method stub
				x=arg0.getX();
				y=arg0.getY();
				cas.repaint();
				p.repaint();
				System.out.println(x+"      "+y);
			}


		});
	}

	public void paint(Graphics g){

		super.paint(g);
		Graphics rr=cas.getGraphics();
		rr.drawString("here",(int) x, (int)y);
	}
	public static void main(String[]args){

		new TestCase().createAndShowGUI();;

	}


}

/**
 * We have to provide our own glass pane so that it can paint.
 */
class MyGlassPane extends JComponent
implements ItemListener {
	Point point;

	//React to change button clicks.
	public void itemStateChanged(ItemEvent e) {
		setVisible(e.getStateChange() == ItemEvent.SELECTED);
	}

	protected void paintComponent(Graphics g) {
		if (point != null) {
			g.setColor(Color.red);
			g.fillOval(point.x - 10, point.y - 10, 20, 20);
		}
	}

	public void setPoint(Point p) {
		point = p;
	}

	public MyGlassPane(AbstractButton aButton,
			JMenuBar menuBar,
			Container contentPane) {
		CBListener listener = new CBListener(aButton, menuBar,
				this, contentPane);
		addMouseListener(listener);
		addMouseMotionListener(listener);
	}
}

/**
 * Listen for all events that our check box is likely to be
 * interested in.  Redispatch them to the check box.
 */
class CBListener extends MouseInputAdapter {
	Toolkit toolkit;
	Component liveButton;
	JMenuBar menuBar;
	MyGlassPane glassPane;
	Container contentPane;

	public CBListener(Component liveButton, JMenuBar menuBar,
			MyGlassPane glassPane, Container contentPane) {
		toolkit = Toolkit.getDefaultToolkit();
		this.liveButton = liveButton;
		this.menuBar = menuBar;
		this.glassPane = glassPane;
		this.contentPane = contentPane;
	}

	public void mouseMoved(MouseEvent e) {
		redispatchMouseEvent(e, false);
	}

	public void mouseDragged(MouseEvent e) {
		redispatchMouseEvent(e, false);
	}

	public void mouseClicked(MouseEvent e) {
		redispatchMouseEvent(e, false);
	}

	public void mouseEntered(MouseEvent e) {
		redispatchMouseEvent(e, false);
	}

	public void mouseExited(MouseEvent e) {
		redispatchMouseEvent(e, false);
	}

	public void mousePressed(MouseEvent e) {
		redispatchMouseEvent(e, false);
	}

	public void mouseReleased(MouseEvent e) {
		redispatchMouseEvent(e, true);
	}

	//A basic implementation of redispatching events.
	private void redispatchMouseEvent(MouseEvent e,
			boolean repaint) {
		Point glassPanePoint = e.getPoint();
		Container container = contentPane;
		Point containerPoint = SwingUtilities.convertPoint(
				glassPane,
				glassPanePoint,
				contentPane);
		if (containerPoint.y < 0) { //we're not in the content pane
			if (containerPoint.y + menuBar.getHeight() >= 0) { 
				//The mouse event is over the menu bar.
				//Could handle specially.
			} else { 
				//The mouse event is over non-system window 
				//decorations, such as the ones provided by
				//the Java look and feel.
				//Could handle specially.
			}
		} else {
			//The mouse event is probably over the content pane.
			//Find out exactly which component it's over.  
			Component component = 
				SwingUtilities.getDeepestComponentAt(
						container,
						containerPoint.x,
						containerPoint.y);

			if ((component != null) 
					&& (component.equals(liveButton))) {
				//Forward events over the check box.
				Point componentPoint = SwingUtilities.convertPoint(
						glassPane,
						glassPanePoint,
						component);
				component.dispatchEvent(new MouseEvent(component,
						e.getID(),
						e.getWhen(),
						e.getModifiersEx(),
						componentPoint.x,
						componentPoint.y,
						e.getClickCount(),
						e.isPopupTrigger()));
			}
		}

		//Update the glass pane if requested.
		if (repaint) {
			glassPane.setPoint(glassPanePoint);
			glassPane.repaint();
		}
	}
}  


Was This Post Helpful? 0
  • +
  • -

  • (4 Pages)
  • +
  • « First
  • 2
  • 3
  • 4