File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
Win a copy of Soft Skills: The software developer's life manual this week in the Jobs Discussion forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Self controlling component

 
con nor
Greenhorn
Posts: 2
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi there

I'm making a painfully slow adjustment from flash programming to java.
I am currently trying to generate a scatterplot where the points draw themselves and detect if the mouse is over them.

I have created a scatterplot class, a pointsArrayList class and a custom Point object(code below). I've currently got the points to draw themselves but cannot get the mouseEvent to work. I've extended the point class from the component class so I though mouseActions would be inherited.
Have I got this all wrong?



//Point.java
package connor;
import java.awt.*;
import java.awt.event.*;

public class Point extends Component implements MouseListener{
private int _x;
private int _y;

/** Creates a new instance of Point */
public Point(int x,int y) {
_x=x;
_y=y;
addMouseListener(this);
}

public int getX() {
return _x;
}

public int getY() {
return _y;
}

public void paint(Graphics g){
g.fillOval(getX(),getY(),10,10);
}

public void mouseClicked(MouseEvent e) {
System.out.println("hit");
}

public void mouseEntered(MouseEvent e) {
System.out.println("hit");
}

public void mouseExited(MouseEvent e) {
}

public void mousePressed(MouseEvent e) {
}

public void mouseReleased(MouseEvent e) {
}
}
 
Stefan Wagner
Ranch Hand
Posts: 1923
Linux Postgres Database Scala
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Whaaaaaaa!
Did you calculate, how many MouseListeners you get, for a 1024x768 pixel area?
768.432

The pixels are drawn on a Component. Give the Component the MouseListener.

There is a AWT/Swing-Forum waiting for this question to be moved to.
(Wait for the sheriffs, their job is moving.)
 
Dirk Schreckmann
Sheriff
Posts: 7023
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Moving this to the Swing / JFC / AWT forum...
 
Eddie Vanda
Ranch Hand
Posts: 281
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Con,

If you can see the circles drawn by the paint routine then I guess your point must have a size big enough to accept a mouse listener. Maybe you could also implement MouseMotionListener and see if that can detect your mouse.

I would not have chosen Point as the class name since there is already a Point class in java.awt.* which you import. Better ranchers than me can say whether that is a problem or not.

I guess individual mouse listener points are ok if you only have a couple of hundred or so. That would certainly simplify your mouse event point identification. I have had up to 500 small JLabel widgets each with a mouse listener with no discernable slowdown effect.

Tell us how you go.

Ed
 
con nor
Greenhorn
Posts: 2
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I've tried the motionListener and still no joy.
I did try a different method where I declared a private Reactangle object within the point. This allowed me to trigger a mousePoint by passing it the mouseCo-ords from the applet (code below). This gave me the result I wanted but not in the way I wanted.

I think what I'm trying to do is create a JComponent from scratch?
The bigger picture is to create interective graphs and to do this the final elements will need to have some degree of self-knowledge. I want them to draw themselves and detect mouse actions relating to themselves.
I then need to extend them into having different shapes & colours. (which is why I didn't want to rely on the Rectangle object). I can't seem to find much information on this anywhere? Any Ideas?

//RectPoint.java
//A rectangular data node object
package connor;
import java.awt.*;

//public class RectPoint extends Rectangle{
public class RectPoint{
private int _x,_y;
private String _n;
private boolean inside=false;
private Rectangle box;
Graphics g;

// Creates a new instance of RectPoint
public RectPoint(String name, int x, int y, int width, int height) {
_x=x;
_y=y;
_n=name;
box=new Rectangle(x,y,width,height);
}

//if mouse is moved inside our rectangle, the flag "inside" is set
public void SubmitMouseCoord(int x, int y)
{
//System.out.println("here");
if(this.box.contains(x,y))
inside=true;
else
inside=false;
}

public String getN(){
return _n;
}

public void paint(Graphics g){
g.fillRect(box.x, box.y, box.width, box.height);
if(inside==true){
g.drawString(this.getN(), this._x+20, this._y+10);
}
}
}
 
Jose Botella
Ranch Hand
Posts: 2120
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Welcome to the Ranch con!

Performing Custom Painting from the Java Tutorial will provide you useful compulsary information.
I will quote:

Before you implement a component that performs custom painting, first make sure that you really need to do so. You might be able to use the text and image capabilities of labels, buttons
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic