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();
}
}
}