Skip to Main Content

New to Java

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Need help with DrawRect Applet

807601Mar 27 2008 — edited Mar 27 2008
The applet works but it only draws a rectangle if the mouse moves from the upper left to lower right.
I need to be able to draw a rectangle no matter what direction the mouse moves.
Here is the current code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class DrawRectangle extends JApplet {

	private static final long serialVersionUID = 1L;

	private int currentX = 0;
	private int currentY = 0;
	private int width = 0;
	private int height = 0;

	private double upperX, upperY, lowerX, lowerY;
	private JPanel buttonPan;
	private JLabel arealbl, perlbl, upperXlbl, lowerYlbl, upperYlbl, lowerXlbl;
	private JTextField areatxt, pertxt, upperXtxt, lowerYtxt, lowerXtxt,
			upperYtxt;

	public void init() {
		setLayout(new GridLayout(2, 1));
		buildPanel();
		addMouseListener(new MouseListener());
		addMouseMotionListener(new MouseMotionListener());

	}

	private void buildPanel() {
		buttonPan = new JPanel();
		buttonPan.setLayout(new FlowLayout());

		arealbl = new JLabel("Area:");
		areatxt = new JTextField(10);
		areatxt.setText("0");
		areatxt.setEditable(false);

		perlbl = new JLabel("Perimeter:");
		pertxt = new JTextField(10);
		pertxt.setText("0");
		pertxt.setEditable(false);

		upperXlbl = new JLabel("Upper X:");
		upperXtxt = new JTextField(10);
		upperXtxt.setText("0");
		upperXtxt.setEditable(false);

		upperYlbl = new JLabel("Upper Y:");
		upperYtxt = new JTextField(10);
		upperYtxt.setText("0");
		upperYtxt.setEditable(false);

		lowerXlbl = new JLabel("Lower X:");
		lowerXtxt = new JTextField(10);
		lowerXtxt.setText("0");
		lowerXtxt.setEditable(false);

		lowerYlbl = new JLabel("Lower Y:");
		lowerYtxt = new JTextField(10);
		lowerYtxt.setText("0");
		lowerYtxt.setEditable(false);

		buttonPan.add(arealbl);
		buttonPan.add(areatxt);
		buttonPan.add(perlbl);
		buttonPan.add(pertxt);
		buttonPan.add(upperXlbl);
		buttonPan.add(upperXtxt);
		buttonPan.add(upperYlbl);
		buttonPan.add(upperYtxt);
		buttonPan.add(lowerXlbl);
		buttonPan.add(lowerXtxt);
		buttonPan.add(lowerYlbl);
		buttonPan.add(lowerYtxt);

		add(buttonPan);
	}

	public double area() {
		return Math.abs(width * height);
	}

	public double perimeter() {
		return Math.abs((2 * width) + (2 * height));
	}

	public void setValues() {
		areatxt.setText(String.format("%.2f", area()));
		pertxt.setText(String.format("%.2f", perimeter()));
		upperXtxt.setText(String.format("%.2f", upperX));
		upperYtxt.setText(String.format("%.2f", upperY));
		lowerXtxt.setText(String.format("%.2f", lowerX));
		lowerYtxt.setText(String.format("%.2f", lowerY));
	}

	public void resetValues() {
		width = 0;
		height = 0;
		repaint();
	}

	public void paint(Graphics g) {
		super.paint(g);		
		g.drawRect(currentX, currentY, width, height);
	}

	private class MouseListener extends MouseAdapter {
		public void mousePressed(MouseEvent e) {
			resetValues();
			currentX = e.getX();
			currentY = e.getY();
			upperX = e.getX();
			upperY = e.getY();
		}
	}

	private class MouseMotionListener extends MouseMotionAdapter {
		public void mouseDragged(MouseEvent e) {
			width = e.getX() - currentX;
			height = e.getY() - currentY;

			lowerX = e.getX();
			lowerY = e.getY();

			setValues();
			repaint();
		}
	}
}
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Apr 24 2008
Added on Mar 27 2008
6 comments
127 views