hi,
i want to draw rectangle based on mousedrag event. if user dragging the mouse, then the rectangle on the applet should increase or decrease basing on current mouse coordinates.
i have the following code.
in the following code i am using SelectionArea class which extends a canvas on which i am performing drawing operation. i am using image variable in this class for double buffering to reduce flickering and to save the applet's previous state(i.e drawing content of applet)
but the code is working fine if i draw first rectangle. if i start to draw second rectangle the previously drawn rectangle is disappearing. i want the previously drawn rectangle to be on the screen
can any one tell me how to solve this. -
import java.awt.*;
-
import java.applet.Applet;
-
import java.awt.event.*;
-
-
/*
-
* This displays a framed area. When the user drags within
-
* the area, this program displays a rectangle extending from
-
* where the user first pressed the mouse button to the current
-
* cursor location.
-
*/
-
-
public class RectangleDemo extends Applet {
-
SelectionArea drawingPanel;
-
Label label;
-
-
public void init() {
-
GridBagLayout gridBag = new GridBagLayout();
-
GridBagConstraints c = new GridBagConstraints();
-
-
setLayout(gridBag);
-
-
drawingPanel = new SelectionArea(this);
-
c.fill = GridBagConstraints.BOTH;
-
c.weighty = 1.0;
-
c.gridwidth = GridBagConstraints.REMAINDER; //end row
-
gridBag.setConstraints(drawingPanel, c);
-
add(drawingPanel);
-
-
label = new Label("Drag within the framed area.");
-
c.fill = GridBagConstraints.HORIZONTAL;
-
c.weightx = 1.0;
-
c.weighty = 0.0;
-
gridBag.setConstraints(label, c);
-
add(label);
-
drawingPanel.setVisible(true);
-
-
validate();
-
}
-
-
public void paint(Graphics g){
-
drawingPanel.repaint();
-
}
-
-
public void update(Graphics g){
-
paint(g);
-
}
-
-
-
}
-
-
class SelectionArea extends Canvas implements ActionListener, MouseListener, MouseMotionListener{
-
Rectangle currentRect;
-
RectangleDemo controller;
-
//for double buffering
-
Image image;
-
Graphics offscreen;
-
public SelectionArea(RectangleDemo controller) {
-
super();
-
this.controller = controller;
-
addMouseListener(this);
-
addMouseMotionListener(this);
-
}
-
-
public void actionPerformed(ActionEvent ae){
-
repaintoffscreen();
-
}
-
-
public void repaintoffscreen(){
-
image = createImage(this.getWidth(), this.getHeight());
-
offscreen = image.getGraphics();
-
Dimension d = getSize();
-
if(currentRect != null){
-
Rectangle box = getDrawableRect(currentRect, d);
-
-
//Draw the box outline.
-
offscreen.drawRect(box.x, box.y, box.width - 1, box.height - 1);
-
//repaint();
-
}
-
}
-
-
public void mouseEntered(MouseEvent me) {}
-
public void mouseExited(MouseEvent me){ }
-
public void mouseClicked(MouseEvent me){}
-
public void mouseMoved(MouseEvent me){}
-
-
public void mousePressed(MouseEvent me) {
-
currentRect = new Rectangle(me.getX(), me.getY(), 0, 0);
-
repaintoffscreen();
-
}
-
-
public void mouseDragged(MouseEvent me) {
-
System.out.println("here in dragged()");
-
currentRect.setSize(me.getX() - currentRect.x, me.getY() - currentRect.y);
-
repaintoffscreen();
-
repaint();
-
}
-
-
public void mouseReleased(MouseEvent me) {
-
currentRect.setSize(me.getX() - currentRect.x, me.getY() - currentRect.y);
-
repaintoffscreen();
-
repaint();
-
}
-
-
public void update(Graphics g){
-
paint(g);
-
}
-
-
public void paint(Graphics g) {
-
g.drawImage(image, 0, 0, this);
-
}
-
-
Rectangle getDrawableRect(Rectangle originalRect, Dimension drawingArea) {
-
int x = originalRect.x;
-
int y = originalRect.y;
-
int width = originalRect.width;
-
int height = originalRect.height;
-
-
//Make sure rectangle width and height are positive.
-
if (width < 0) {
-
width = 0 - width;
-
x = x - width + 1;
-
if (x < 0) {
-
width += x;
-
x = 0;
-
}
-
}
-
if (height < 0) {
-
height = 0 - height;
-
y = y - height + 1;
-
if (y < 0) {
-
height += y;
-
y = 0;
-
}
-
}
-
-
//The rectangle shouldn't extend past the drawing area.
-
if ((x + width) > drawingArea.width) {
-
width = drawingArea.width - x;
-
}
-
if ((y + height) > drawingArea.height) {
-
height = drawingArea.height - y;
-
}
-
-
return new Rectangle(x, y, width, height);
-
}
-
}
-
-
also if i run this code on full screen mode then i am seeing that the rectangle is appering on screen only after i released the mouse. but i want the rectangle to be on the screen while dragging the mouse and it should change it's dimension according to the current mouse coordinates.
can any one help me pls.
1 5025
hi
i modified my code as follows.
but now the rectangle is visible on the applet only after i release my mouse. but now i am able to draw multiple rectangles. the only problem is i can not see the rectangle while dragging the mouse. -
import java.applet.*;
-
import java.awt.*;
-
import java.awt.BorderLayout;
-
import java.awt.Color;
-
import java.awt.Graphics;
-
import java.awt.Image;
-
import java.awt.event.MouseEvent;
-
import java.awt.event.MouseListener;
-
import java.awt.event.MouseMotionListener;
-
-
public class testingDemo extends Applet {
-
private final int RECT_OP = 1;
-
public int opStatus = 5;
-
private int mousex = 0;
-
private int mousey = 0;
-
public boolean dragging = false;
-
private int Orx = 0;
-
private int Ory = 0;
-
private int OrWidth = 0;
-
private int OrHeight = 0;
-
private int drawX = 0;
-
private int drawY = 0;
-
drawingPanel drawPanel;
-
public Image image;
-
-
public void init() {
-
setLayout(new BorderLayout());
-
drawPanel = new drawingPanel();
-
drawPanel.setVisible(true);
-
this.setBackground(Color.white);
-
add(drawPanel, BorderLayout.CENTER);
-
}
-
-
class drawingPanel extends Panel implements MouseListener, MouseMotionListener {
-
-
drawingPanel() {
-
addMouseListener(this);
-
addMouseMotionListener(this);
-
}
-
-
public void rectOperation(MouseEvent e){
-
mousex = e.getX();
-
mousey = e.getY();
-
setActualBoundry();
-
if(image == null){
-
image = this.createImage(this.getWidth(), this.getHeight());
-
}
-
Graphics offscreen = image.getGraphics();
-
offscreen.setXORMode(Color.white);
-
offscreen.drawRect(drawX, drawY, OrWidth, OrHeight);
-
offscreen.drawRect(drawX, drawY, OrWidth, OrHeight);
-
repaint();
-
}
-
-
public boolean mouseHasMoved(MouseEvent e) {
-
return (mousex != e.getX() || mousey != e.getY());
-
}
-
-
public void setActualBoundry() {
-
if (mousex < Orx || mousey < Ory) {
-
if (mousex < Orx) {
-
OrWidth = Orx - mousex;
-
drawX = Orx - OrWidth;
-
} else {
-
drawX = Orx;
-
OrWidth = mousex - Orx;
-
}
-
if (mousey < Ory) {
-
OrHeight = Ory - mousey;
-
drawY = Ory - OrHeight;
-
} else {
-
drawY = Ory;
-
OrHeight = mousey - Ory;
-
}
-
} else {
-
drawX = Orx;
-
drawY = Ory;
-
OrWidth = mousex - Orx;
-
OrHeight = mousey - Ory;
-
}
-
}
-
-
public void setGraphicalDefaults(MouseEvent e) {
-
mousex = e.getX();
-
mousey = e.getY();
-
Orx = e.getX();
-
Ory = e.getY();
-
drawX = e.getX();
-
drawY = e.getY();
-
OrWidth = 0;
-
OrHeight = 0;
-
}
-
-
public void mouseDragged(MouseEvent e) {
-
dragging = true;
-
System.out.println("In mousedragged");
-
opStatus = RECT_OP;
-
rectOperation(e);
-
}
-
-
public void mouseReleased(MouseEvent e) {
-
System.out.println("in mouseReleased()");
-
dragging = false;
-
opStatus = RECT_OP;
-
mousex = e.getX();
-
mousey = e.getY();
-
setActualBoundry();
-
releasedRect();
-
}
-
-
public void mouseEntered(MouseEvent e) { }
-
-
public void releasedRect() {
-
System.out.println("in releasedRect()");
-
Graphics offscreen = image.getGraphics();
-
offscreen.setXORMode(Color.white);
-
offscreen.drawRect(drawX, drawY, OrWidth, OrHeight);
-
offscreen.drawRect(drawX, drawY, OrWidth, OrHeight);
-
offscreen.setPaintMode();
-
offscreen.drawRect(drawX, drawY, OrWidth, OrHeight);
-
offscreen.dispose();
-
repaint();
-
}
-
-
public void mouseClicked(MouseEvent e) {}
-
-
public void mouseExited(MouseEvent e) {}
-
-
public void mouseMoved(MouseEvent e) {}
-
-
public void mousePressed(MouseEvent e) {
-
setGraphicalDefaults(e);
-
rectOperation(e);
-
}
-
-
public void paint(Graphics g) {
-
g.drawImage(image, 0, 0, this);
-
}
-
-
public void update(Graphics g) {
-
paint(g);
-
}
-
}
-
-
public void paint(Graphics g) {
-
drawPanel.repaint();
-
}
-
-
public void update(Graphics g) {
-
paint(g);
-
}
-
}
-
-
can any one tell me what should i chagne in the above code so that the rectangle will be visible while dragging the mouse.
thanks for any help
Sign in to post your reply or Sign up for a free account.
Similar topics
by: dunkonu |
last post by:
I am new to VB.net, can anybody help me how to create a form that ask
user to enter the "WIDTH" and "HEIGHT" and draw a box display in the
textbox?
thanks
|
by: Steve |
last post by:
I'm using CustomDraw to draw my listview item but there seems to be some basic characteristics of the draw operation that Windows refuses to allow you to change.
1) I want to most the position of...
|
by: Richard |
last post by:
I have a requirement to put a GDI style circle or rectangle border around
the selected row of a datagrid/ It will overlap into the row above and below
the selected row. Doing this in a the OnPaint...
|
by: Praveen |
last post by:
Hello,
I have a web page which will display the map of a
city/place. I have a toolbar which contains 'zoom in'
and 'zoom out' buttons. When the user clicks on zoom
in/zoom out button, he should...
|
by: Colin McGuire |
last post by:
Hi there. I have written a small procedure to draw various shapes on
things. A bit of it is shown below.
Private Sub drawShape(ByVal shapeType As Integer, ByRef g As Graphics)
Select Case...
|
by: Rob Richardson |
last post by:
Greetings!
I am creating a form that will contain information that will eventually be
on a label. The label has a 2-column table with lines separating the cells.
I want my form to resemble the...
|
by: Tom |
last post by:
Hi
Hi i am trying to draw on top of a button on a standard toolbar. All i
want to do is draw a small rectangle on the button to represent the
selected color.
I have tried the folowing code in...
|
by: Mark Ingram |
last post by:
Hi, how can i draw a rounded rectange, with a border within a specified
area?
i.e. if i have a Rectangle with width and height of 100, how can i draw
a rectange with 2 pixel border inside of the...
|
by: Jeff Waskiewicz |
last post by:
Hello All,
I'm trying to solve a nagging problem. The goal is to draw a rectangle over
the top of all the other controls on a form. Specifically, over a ChartFX
control. The user would draw...
|
by: lllomh |
last post by:
Define the method first
this.state = {
buttonBackgroundColor: 'green',
isBlinking: false, // A new status is added to identify whether the button is blinking or not
}
autoStart=()=>{
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 4 Oct 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM)
The start time is equivalent to 19:00 (7PM) in Central...
|
by: Aliciasmith |
last post by:
In an age dominated by smartphones, having a mobile app for your business is no longer an option; it's a necessity. Whether you're a startup or an established enterprise, finding the right mobile app...
|
by: tracyyun |
last post by:
Hello everyone,
I have a question and would like some advice on network connectivity. I have one computer connected to my router via WiFi, but I have two other computers that I want to be able to...
|
by: giovanniandrean |
last post by:
The energy model is structured as follows and uses excel sheets to give input data:
1-Utility.py contains all the functions needed to calculate the variables and other minor things (mentions...
|
by: NeoPa |
last post by:
Hello everyone.
I find myself stuck trying to find the VBA way to get Access to create a PDF of the currently-selected (and open) object (Form or Report).
I know it can be done by selecting :...
|
by: Teri B |
last post by:
Hi, I have created a sub-form Roles. In my course form the user selects the roles assigned to the course.
0ne-to-many. One course many roles.
Then I created a report based on the Course form and...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 1 Nov 2023 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM)
Please note that the UK and Europe revert to winter time on...
|
by: GKJR |
last post by:
Does anyone have a recommendation to build a standalone application to replace an Access database? I have my bookkeeping software I developed in Access that I would like to make available to other...
| |