Code: Select all
// File: MuisComponent.java
// Date: 30 September 2006.
//
// Copyright (c) 2006 Cliff Huylebroeck. All Rights Reserved.
//
// Permission to use, copy, modify, and distribute this software
// and its documentation for NON-COMMERCIAL purposes and without
// fee is hereby granted provided that this copyright notice
// appears in all copies.
//
// Cliff Huylebroeck MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
// SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Cliff Huylebroeck SHALL NOT
// BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public class MuisComponent extends Component implements MouseListener, MouseMotionListener
{
private boolean isMuisInInhoud=false;
private boolean isMuisNeer=false;
public MuisComponent()
{
addMouseListener(this);
addMouseMotionListener(this);
}
public void update(final Graphics g)
{
paint(g);
}
public void mouseClicked(final MouseEvent event)
{
event.consume();
// opm: zeker niets mee doen.
// Dit gebeurt alleen als er niet wordt bewogen.
}
public void mouseEntered(final MouseEvent event)
{
final Point p=event.getPoint();
isMuisInInhoud=IsPuntInInhoud(p);
if (isMuisNeer)
{
event.consume();
repaint();
}
}
public void mouseExited(final MouseEvent event)
{
event.consume();
// opm: zeker niets mee doen.
// Dit gebeurt:
// 1. als we buiten gaan zonder te klikken.
// 2. als we loslaten na buiten te gaan (is te laat).
}
public void mousePressed(final MouseEvent event)
{
event.consume();
// opm: als we in de kader maar buiten de inhoud klikken dan beschouwen
// we dat als buiten de kader klikken.
final Point p=event.getPoint();
isMuisNeer=BlijftPuntInInhoud(p);
repaint();
}
public void mouseReleased(final MouseEvent event)
{
event.consume();
if (!isMuisNeer)
{
// opm: de muis wordt over deze component losgelaten zonder dat er
// in geklikt was.
return;
}
if (isMuisInInhoud)
{
ReageerOpKlik();
}
isMuisNeer=false;
repaint();
}
public void mouseDragged(final MouseEvent event)
{
if (!isMuisNeer)
{
// opm: de muis wordt over deze component gesleept zonder dat er
// in geklikt was.
return;
}
event.consume();
final Point p=event.getPoint();
isMuisInInhoud=IsPuntInInhoud(p);
repaint();
}
public void mouseMoved(final MouseEvent event)
{
event.consume();
// opm: zeker niets mee doen.
// Als er niet geklikt is dan is dit niet relevant.
}
public boolean IsIngedrukt()
{
if (!isMuisInInhoud)
{
return false;
}
if (!isMuisNeer)
{
return false;
}
return true;
}
public boolean IsPuntInInhoud(final Point p)
{
final Dimension afmeting=getSize();
if (p.x>afmeting.width)
{
return false;
}
if (p.y>afmeting.height)
{
return false;
}
return true;
}
public boolean BlijftPuntInInhoud(final Point p)
{
final Dimension afmeting=getSize();
if (p.x<0)
{
return false;
}
if (p.x>afmeting.width)
{
return false;
}
if (p.y<0)
{
return false;
}
if (p.y>afmeting.height)
{
return false;
}
return true;
}
public void ReageerOpKlik()
{
}
}