Hello, I need assistance with a Java Project. I would like to make it where the
ID: 3759029 • Letter: H
Question
Hello, I need assistance with a Java Project. I would like to make it where the user can click and drag the rectangles and have the location of the rectangles updated as they do this. I would also like to have the JPanel window to be bigger apon start so that both rectangles are visible when the project is run. The code below is already working and runable, I would like you to add and edit the code in order for the rectangles to be draggable as well. Thank you very much!
//import the required packages
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
//class RectangleIntersectionGUI
public class RectangleIntersectionGUI extends JApplet
{
//declaration of components
private JTextField rectangle1P1x = new JTextField();
private JTextField rectangle1P1y = new JTextField();
private JTextField rectangle1width = new JTextField();
private JTextField rectangle1height = new JTextField();
private JTextField rectangle2P1x = new JTextField();
private JTextField rectangle2P1y = new JTextField();
private JTextField rectangle2width = new JTextField();
private JTextField rectangle2height = new JTextField();
private JButton jbtRedraw = new JButton("Redraw Rectangles");
//declaration of classes
private MyRectangle2D rectangle1 = new MyRectangle2D(50, 50, 70, 50);
private MyRectangle2D rectangle2= new MyRectangle2D(90, 100, 50, 70);
private DrawPanel paintPanel = new DrawPanel();
private JLabel labelStatus = new JLabel("Two rectangle intersect? "
+(rectangle1.overlaps(rectangle1) ? "Yes" : "No"),JLabel.CENTER);
//constructor
public RectangleIntersectionGUI()
{
//create a panel
JPanel p1 = new JPanel(new GridLayout(4, 2));
//set the Border to the panel
p1.setBorder(new TitledBorder("" + "Enter rectangle 1 info"));
//add the first rectangle labels to the panel
p1.add(new JLabel("Center x:"));
p1.add(rectangle1P1x);
p1.add(new JLabel("Center y:"));
p1.add(rectangle1P1y);
p1.add(new JLabel("Width: "));
p1.add(rectangle1width);
p1.add(new JLabel("Height:"));
p1.add(rectangle1height);
//create second panel
JPanel p2 = new JPanel(new GridLayout(4, 2));
//set the border to the panel
p2.setBorder(new TitledBorder("Enter rectangle 2 info"));
//add the second rectangle labels to the panel
p2.add(new JLabel("Center x:"));
p2.add(rectangle2P1x);
p2.add(new JLabel("Center y:"));
p2.add(rectangle2P1y);
p2.add(new JLabel("Width: "));
p2.add(rectangle2width);
p2.add(new JLabel("Height: "));
p2.add(rectangle2height);
//create a third panel
JPanel p3 = new JPanel(new GridLayout(1, 2));
//add the panels p1, p2 to the third panel
p3.add(p1);
p3.add(p2);
//create fourth panel
JPanel p4 = new JPanel(new BorderLayout());
//add the panel p3, and button to the panel p4
p4.add(p3, BorderLayout.CENTER);
p4.add(jbtRedraw, BorderLayout.SOUTH);
//add the label, panel p4, and paintPanel to the applet
add(labelStatus, BorderLayout.NORTH);
add(p4, BorderLayout.SOUTH);
add(paintPanel, BorderLayout.CENTER);
//add Action Listener class to the button
jbtRedraw.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//set the x,y, width and height values for the rectangle1 by getting inputs given by user
rectangle1.setX(Integer.parseInt(rectangle1P1x.getText()));
rectangle1.setY(Integer.parseInt(rectangle1P1y.getText()));
rectangle1.setWidth(Integer.parseInt(rectangle1width.getText()));
rectangle1.setHeight(Integer.parseInt(rectangle1height.getText()));
//set the x,y, width and height values for the rectangle2 by getting input values given by user
rectangle2.setX(Integer.parseInt(rectangle2P1x.getText()));
rectangle2.setY(Integer.parseInt(rectangle2P1y.getText()));
rectangle2.setWidth(Integer.parseInt(rectangle2width.getText()));
rectangle2.setHeight(Integer.parseInt(rectangle2height.getText()));
//set the text for a label
labelStatus.setText("Two triangles intersect?"+(rectangle1.overlaps(rectangle2)?"Yes" : "No"));
//calling repaint method
paintPanel.repaint();
}
});
}
//Draw Panel class
class DrawPanel extends JPanel
{
//paintComponent method
protected void paintComponent(Graphics g)
{
super.paintComponents(g);
displayRectangle(g, rectangle1);
displayRectangle(g, rectangle2);
repaint();
}
//method to draw rectangle
private void displayRectangle(Graphics g, MyRectangle2D rect)
{
g.drawRect(
(int)(rect.getX()),
(int)(rect.getY()),
(int)(rect.getWidth()),
(int)(rect.getHeight()));
}
}
//applet's init method
public void init()
{
//method call to fill initial values
fillTextFieldWithInitialValues();
}
//method to fill initial values
public void fillTextFieldWithInitialValues()
{
//set the default values for rectangle1
rectangle1P1x.setText((int)rectangle1.getX()+ "");
rectangle1P1y.setText((int)rectangle1.getY()+ "");
rectangle1width.setText((int)rectangle1.getWidth() + "");
rectangle1height.setText((int)rectangle1.getHeight() + "");
//set the default values for rectangle2
rectangle2P1x.setText((int)rectangle2.getX() + "");
rectangle2P1y.setText((int)rectangle2.getY() + "");
rectangle2width.setText((int)rectangle2.getWidth() + "");
rectangle2height.setText((int)rectangle2.getHeight() + "");
}
//main method
public static void main(String[] args)
{
//create a frame
JFrame frame = new JFrame("Rectangle" + " Intersection");
//create an object to applet class
RectangleIntersectionGUI applet = new RectangleIntersectionGUI();
//initialize the applet
applet.start();
//add the applet to the frame
frame.add(applet);
//set the setting for the frame
Dimension d=new Dimension();
d.setSize(600, 800);
frame.setSize(d);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
import java.awt.Dimension;
import javax.swing.JFrame;
//class MyRectangle2D
public class MyRectangle2D
{
//declare the required variables
private double x, y;
private double width, height;
//empty constructor
public MyRectangle2D()
{
x = y = 0;
width = height = 1;
}
//parameterized constructor
public MyRectangle2D(double x, double y, double width, double height)
{
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
//getter method to get the x,y, width and height of a rectangle
public double getX()
{
return x;
}
public double getY()
{
return y;
}
public double getWidth()
{
return width;
}
public double getHeight()
{
return height;
}
//setter methods to set the values for x,y,width and height of a rectangle
public void setX(double x)
{
this.x = x;
}
public void setY(double y)
{
this.y = y;
}
public void setWidth(double width)
{
this.width = width;
}
public void setHeight(double height)
{
this.height = height;
}
//overlap method that returns boolean value
public boolean overlaps(MyRectangle2D r)
{
return Math.abs(this.x - r.x) <=(this.width + r.width) / 2 &&
Math.abs(this.y - r.y) <= (this.height + r.height) / 2;
}
}
Explanation / Answer
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.Dimension;
import javax.swing.JFrame;
//class RectangleIntersectionGUI
public class RectangleIntersectionGUI extends JApplet
{
//declaration of components
private JTextField rectangle1P1x = new JTextField();
private JTextField rectangle1P1y = new JTextField();
private JTextField rectangle1width = new JTextField();
private JTextField rectangle1height = new JTextField();
private JTextField rectangle2P1x = new JTextField();
private JTextField rectangle2P1y = new JTextField();
private JTextField rectangle2width = new JTextField();
private JTextField rectangle2height = new JTextField();
private JButton jbtRedraw = new JButton("Redraw Rectangles");
//declaration of classes
private MyRectangle2D rectangle1 = new MyRectangle2D(50, 50, 70, 50);
private MyRectangle2D rectangle2= new MyRectangle2D(90, 100, 50, 70);
private DrawPanel paintPanel = new DrawPanel();
private JLabel labelStatus = new JLabel("Two rectangle intersect? "
+(rectangle1.overlaps(rectangle1) ? "Yes" : "No"),JLabel.CENTER);
//constructor
public RectangleIntersectionGUI()
{
//create a panel
JPanel p1 = new JPanel(new GridLayout(4, 2));
//set the Border to the panel
p1.setBorder(new TitledBorder("" + "Enter rectangle 1 info"));
//add the first rectangle labels to the panel
p1.add(new JLabel("Center x:"));
p1.add(rectangle1P1x);
p1.add(new JLabel("Center y:"));
p1.add(rectangle1P1y);
p1.add(new JLabel("Width: "));
p1.add(rectangle1width);
p1.add(new JLabel("Height:"));
p1.add(rectangle1height);
//create second panel
JPanel p2 = new JPanel(new GridLayout(4, 2));
//set the border to the panel
p2.setBorder(new TitledBorder("Enter rectangle 2 info"));
//add the second rectangle labels to the panel
p2.add(new JLabel("Center x:"));
p2.add(rectangle2P1x);
p2.add(new JLabel("Center y:"));
p2.add(rectangle2P1y);
p2.add(new JLabel("Width: "));
p2.add(rectangle2width);
p2.add(new JLabel("Height: "));
p2.add(rectangle2height);
//create a third panel
JPanel p3 = new JPanel(new GridLayout(1, 2));
//add the panels p1, p2 to the third panel
p3.add(p1);
p3.add(p2);
//create fourth panel
JPanel p4 = new JPanel(new BorderLayout());
//add the panel p3, and button to the panel p4
p4.add(p3, BorderLayout.CENTER);
p4.add(jbtRedraw, BorderLayout.SOUTH);
//add the label, panel p4, and paintPanel to the applet
add(labelStatus, BorderLayout.NORTH);
add(p4, BorderLayout.SOUTH);
add(paintPanel, BorderLayout.CENTER);
//add Action Listener class to the button
jbtRedraw.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//set the x,y, width and height values for the rectangle1 by getting inputs given by user
rectangle1.setX(Integer.parseInt(rectangle1P1x.getText()));
rectangle1.setY(Integer.parseInt(rectangle1P1y.getText()));
rectangle1.setWidth(Integer.parseInt(rectangle1width.getText()));
rectangle1.setHeight(Integer.parseInt(rectangle1height.getText()));
//set the x,y, width and height values for the rectangle2 by getting input values given by user
rectangle2.setX(Integer.parseInt(rectangle2P1x.getText()));
rectangle2.setY(Integer.parseInt(rectangle2P1y.getText()));
rectangle2.setWidth(Integer.parseInt(rectangle2width.getText()));
rectangle2.setHeight(Integer.parseInt(rectangle2height.getText()));
//set the text for a label
labelStatus.setText("Two triangles intersect?"+(rectangle1.overlaps(rectangle2)?"Yes" : "No"));
//calling repaint method
paintPanel.repaint();
}
});
}
//Draw Panel class
class DrawPanel extends JPanel
{
//paintComponent method
protected void paintComponent(Graphics g)
{
super.paintComponents(g);
displayRectangle(g, rectangle1);
displayRectangle(g, rectangle2);
repaint();
}
//method to draw rectangle
private void displayRectangle(Graphics g, MyRectangle2D rect)
{
g.drawRect(
(int)(rect.getX()),
(int)(rect.getY()),
(int)(rect.getWidth()),
(int)(rect.getHeight()));
}
}
//applet's init method
public void init()
{
//method call to fill initial values
fillTextFieldWithInitialValues();
}
//method to fill initial values
public void fillTextFieldWithInitialValues()
{
//set the default values for rectangle1
rectangle1P1x.setText((int)rectangle1.getX()+ "");
rectangle1P1y.setText((int)rectangle1.getY()+ "");
rectangle1width.setText((int)rectangle1.getWidth() + "");
rectangle1height.setText((int)rectangle1.getHeight() + "");
//set the default values for rectangle2
rectangle2P1x.setText((int)rectangle2.getX() + "");
rectangle2P1y.setText((int)rectangle2.getY() + "");
rectangle2width.setText((int)rectangle2.getWidth() + "");
rectangle2height.setText((int)rectangle2.getHeight() + "");
}
//main method
public static void main(String[] args)
{
//create a frame
JFrame frame = new JFrame("Rectangle" + " Intersection");
//create an object to applet class
RectangleIntersectionGUI applet = new RectangleIntersectionGUI();
//initialize the applet
applet.start();
//add the applet to the frame
frame.add(applet);
//set the setting for the frame
Dimension d=new Dimension();
d.setSize(600, 800);
frame.setSize(d);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true)
}
}
//class MyRectangle2D
public class MyRectangle2D
{
//declare the required variables
private double x, y;
private double width, height;
//empty constructor
public MyRectangle2D()
{
x = y = 0;
width = height = 1;
}
//parameterized constructor
public MyRectangle2D(double x, double y, double width, double height)
{
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
//getter method to get the x,y, width and height of a rectangle
public double getX()
{
return x;
}
public double getY()
{
return y;
}
public double getWidth()
{
return width;
}
public double getHeight()
{
return height;
}
//setter methods to set the values for x,y,width and height of a rectangle
public void setX(double x)
{
this.x = x;
}
public void setY(double y)
{
this.y = y;
}
public void setWidth(double width)
{
this.width = width;
}
public void setHeight(double height)
{
this.height = height;
}
//overlap method that returns boolean value
public boolean overlaps(MyRectangle2D r)
{
return Math.abs(this.x - r.x) <=(this.width + r.width) / 2 &&
Math.abs(this.y - r.y) <= (this.height + r.height) / 2;
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.