I try to write a program to draw a custom shapes and then execute all mouse events like dragging,clicking,moving etc.I want to know that in other editor when any shape is select or mouse is near to there boundary then its boundary point start to display.I just want the logic not code how corner points displayed like in image? I've done checking that my mouse clicking is inside of shape or not.This is a rounded-rectangle.When I clicked on its rectangle boundary is start displaying and connection points are also start displaying.How do I do that?
Shape interface has getBounds() and contains() methods. Use contains() to determine whether point belongs to the Shape and then use getBounds() to get rectable and use the rectangle's corners to draw the dragging points.
Related
I'm trying to figure out if there's any way to draw images (drawRect(), drawOval(), etc.) based on if/else statements or by using an ActionListener.
I don't want to post the complete problem because this is for an assignment, but for my own scenario:
If I have a button on a JPanel named "draw rectangle" and I have the x, y, width, and height from user input, is there any way I can attach an actionListener to "draw rectangle" that could somehow draw the rectangle using those values (passed by reference?).
I know I can use paintComponent, but I can't put that into the ActionListener and it seems to do things of its own accord and not based on a specific user's actions.
I don't really have any code for this because I can't figure out how to do it at all.
If I have a button on a
JPanel named "draw rectangle" and I have the
x, y, width, and height from user input, is there any way I can attach
an actionListener to "draw rectangle" that could somehow draw the
rectangle using those values (passed by reference?).
The short answer is yes.
Generally, you'll need to save the rectangle instructions in a model, and have the JPanel redraw the model when any of the shape buttons are pressed.
Let's take your rectangle example. What do you need to know to draw a rectangle on a JPanel? You need a starting point (upper left) and an ending point (lower right). You can use a java.awt.Point to hold the starting and ending point. You can set the thickness of the line, in pixels. You can set the color of the rectangle, using a JColorChooser. You can also set the rectangle to be an outline or filled with the chosen color.
That description will be similar for a line and a triangle. A circle is a little different, with a center point and a radius. As you can see, we already have a lot of information to keep track of just with these simple geometric shapes.
Then there's the issue of the drawing surface itself. It's possible to have a drawing surface larger than your computer screen can show. You can put the drawing surface inside of a JScrollPane.
All of these things must be determined so you can build the model of your application. You do this before you build the view using Swing components and the controller using action listeners.
I am working on a project that draws an ellipse centred at where the user clicks.
I need to make two buttons, + and -, which make the last ellipse drawn by the user rotate by 15 degrees.
I also need to make an undo button that removes the last ellipse the user drew.
Both of these tasks require reference to the last sprite drawn, so how would you refer to it? In other words, how would you change a drawn sprite?
The Momento Pattern is something you can use for this.
im creating a program for drawing graphs but I have a problem, I need to know if the mouse is over a QuadCurve. How would create the function that function?
the program I'm doing is to draw graphs (draw nodes and edges). to draw the edges with the mouse at a point just press the JPanel and drag to the end point and is drawn with Graphics2D QuadCurve2D object and stored in an array of objects. each object in the object is saved QuadCurve2D and it contains 3 points (start, control, end), now I need a method to eliminate any edge that this drawn on the JPanel and for this each edge must have a method that takes as a parameter the mouse point and returns true if the point is on the curve
Hook up a mouse motion listener to your panel, then on mouse motion events use the intersects method on the QuadCurve2D object to detect whether it hits a rectangle centered on the mouse cursors new position. Experiment with the width and height parameters to find what feels best for you.
I have a program containing five buttons:
i) Square ii) Rectangle iii) Circle iv) Triangle v) Clear
Clicking on any of the first four buttons will draw the respective shape on the drawing canvas using the following code:
The shapes can be dragged. They also should be resized. I was just trying to change the cursor of the mouse around the four edges of the shape (NW, NE, SW, SE). This works fine for squares and rectangles since they have four sides. However, I have some problem implementing the same for the circle and triangle.
This is what I did in my mouseClicked event:
What I want to do is that if the string shape_type contains circle, for example, it draws a border around it so that the user can see the boundaries of the shape.
However, I can't just use the following code inside the if statement:
How can I draw the border please? Thanks :)
You are correct that you can't do painting in a MouseListener method. What you can do is set shapeUnderMouse in your mouseClicked method, then call repaint. You'll get better performance if you only repaint the areas that you know are changing visually, but it's not strictly necessary.
The if (shapeUnderMouse != null) block should be placed in your paint method.
If I draw some circles using Java2D. Is there a way display some text when I hover over any of the circles? i.e. I want to display the ID of that circle and some other stuff.
There are a number of ways to accomplish what you want. This is one solution. I assume that you are using Ellipse2D to create the circle. And I assume that you are drawing the circle on a JComponent like a JPanel.
So you declare the Ellipse.
Shape circle = new Ellispe2D.Double(x, y, width, height);
Then you implement MouseMotionListener to detect when the user moves the Mouse over the JPanel.
public void mouseMoved(MouseEvent e){
if(circle.contains(e.getPoint())){
//the mouse pointer is over the circle. So set a Message or whatever you want to do
msg = "You are over circle 1";
}else{
msg = "You are not over the circle";
}
}
Then in the paint() or paintComponent method (whichever one you are overriding to do the painting):
g2.fill(circle);
g2.drawString(msg, 10, 10); //write out the message
I don't know if You can do this directly. But You can use simple math to check cursors position: (x-a)^2+(y-b)^2=r^2 where x,y is cursors position a,b is circles center and r is radius.
You'll have to save all the centers and radius and test it against the current mouse position.
it's pretty simple operation. If the distance of the mouse position and the center of one of the circle is smaller then the radius, the mouse is inside it and you can draw the hover message you want.
there is a question here that shows the math: Equation for testing if a point is inside a circle
Hope that helps...
There is a Polygon class that might do it for you (the contains method), but none of the implementing classes is a circle :S