This commit is contained in:
ldy
2026-03-01 23:18:55 -05:00
commit 67f753a5d1
3087 changed files with 218259 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Question3</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,12 @@
public class Controller {
protected Model m;
public Controller(Model m) {
this.m = m;
}
protected void shutdown() {
m.saveData();
System.exit(0);
}
}

View File

@@ -0,0 +1,16 @@
import java.awt.Point;
public class ControllerClicks extends Controller {
public ControllerClicks(Model m) {
super(m);
}
public void mouseClicked(Point p) {
m.addPoint(p);
}
public void resetClicked() {
m.clearAllPoints();
}
public void undoClicked() {
m.deleteLastPoint();
}
}

View File

@@ -0,0 +1,126 @@
import java.awt.Point;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class Model {
private ArrayList<Point> points;
private ArrayList<ModelListener> listeners;
private Connection connection;
public Model() {
points = new ArrayList<Point>();
listeners = new ArrayList<ModelListener>();
try {
// Establish a connection to the MySQL database
connection = DriverManager.getConnection("jdbc:Mysql://localhost/java", "root", "");
// Delete all existing point coordinates from the 'points' table
String deleteQuery = "DELETE FROM points";
Statement deleteStatement = connection.createStatement();
deleteStatement.executeUpdate(deleteQuery);
// Fetch all point coordinates from the 'points' table
String selectQuery = "SELECT x, y FROM points";
Statement selectStatement = connection.createStatement();
ResultSet resultSet = selectStatement.executeQuery(selectQuery);
// Add the fetched coordinates to the 'points' list
while (resultSet.next()) {
int x = resultSet.getInt("x");
int y = resultSet.getInt("y");
points.add(new Point(x, y));
}
} catch (SQLException e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
public void addListener(ModelListener l) {
listeners.add(l);
}
public ArrayList<Point> getPoints() {
return points;
}
public void addPoint(Point p) {
points.add(p);
notifyListeners();
}
public void clearAllPoints() {
points.clear();
notifyListeners();
}
public void deleteLastPoint() {
if (points.size() > 0) {
points.remove(points.size() - 1);
notifyListeners();
}
}
public void saveData() {
try {
// Delete all existing point coordinates from the 'points' table
String deleteQuery = "DELETE FROM points";
Statement deleteStatement = connection.createStatement();
deleteStatement.executeUpdate(deleteQuery);
// Insert the updated point coordinates into the 'points' table
String insertQuery = "INSERT INTO points (x, y) VALUES (?, ?)";
PreparedStatement insertStatement = connection.prepareStatement(insertQuery);
for (Point p : points) {
insertStatement.setInt(1, p.x);
insertStatement.setInt(2, p.y);
insertStatement.executeUpdate();
}
} catch (SQLException e) {
System.err.println(e.getMessage());
System.exit(1);
}
notifyListeners();
}
public int numberOfPoints() {
return points.size();
}
private void notifyListeners() {
for (ModelListener l : listeners) {
l.update();
}
}
public static void testModel() {
Model m = new Model();
m.addListener(new ModelListener() {
@Override
public void update() {
System.out.println(true + " (listener)");
}
});
System.out.println(m.getPoints() == m.points);
Point p1 = new Point(1, 2);
Point p2 = new Point(3, 4);
m.addPoint(p1); // Listener called.
m.addPoint(p2); // Listener called.
System.out.println(m.numberOfPoints() == 2);
System.out.println(m.points.get(0) == p1);
System.out.println(m.points.get(1) == p2);
m.deleteLastPoint(); // Listener called.
System.out.println(m.numberOfPoints() == 1);
System.out.println(m.points.get(0) == p1);
m.clearAllPoints(); // Listener called.
System.out.println(m.numberOfPoints() == 0);
m.notifyListeners(); // Listener called.
}
}

View File

@@ -0,0 +1,4 @@
public interface ModelListener {
public void update();
}

View File

@@ -0,0 +1,43 @@
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class MyFrame extends View<ControllerClicks> {
public MyFrame(Model m, ControllerClicks c) {
super(m, c);
this.setTitle("MyFrame Title");
this.setSize(400, 300);
this.setLocationRelativeTo(null);
this.setLayout(new BorderLayout());
MyPanel centerPanel = new MyPanel(m, c);
this.add(centerPanel, BorderLayout.CENTER);
JPanel topPanel = new JPanel();
this.add(topPanel, BorderLayout.PAGE_START);
topPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
JButton resetButton = new JButton("Reset");
resetButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
c.resetClicked();
}
});
topPanel.add(resetButton);
JButton undoButton = new JButton("Undo");
undoButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
c.undoClicked();
}
});
topPanel.add(undoButton);
this.setVisible(true);
}
@Override
public void update() {
repaint(); // Makes Swing call MyPanel's paintComponent method.
}
}

View File

@@ -0,0 +1,42 @@
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.JPanel;
public class MyPanel extends JPanel {
private Model m;
private ControllerClicks c;
public MyPanel(Model m, ControllerClicks c) {
this.m = m;
this.c = c;
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON1) {
c.mouseClicked(e.getPoint());
}
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
ArrayList<Point> points = m.getPoints();
g.setColor(Color.RED);
if(points.size() == 1) {
Point p = points.get(0);
g.drawRect((int)p.getX(), (int)p.getY(), 1, 1);
}
else {
for(int i = 1; i < points.size(); i++) {
Point start = points.get(i - 1);
Point end = points.get(i);
g.drawLine((int)start.getX(), (int)start.getY(),
(int)end.getX(), (int)end.getY());
}
}
}
}

View File

@@ -0,0 +1,14 @@
public class Start {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Model m = new Model();
ControllerClicks c1 = new ControllerClicks(m);
MyFrame v1 = new MyFrame(m, c1);
Controller c2 = new Controller(m);
ViewNumber v2 = new ViewNumber(m, c2);
}
});
}
}

View File

@@ -0,0 +1,5 @@
public class Test {
public static void main(String[] args) {
Model.testModel();
}
}

View File

@@ -0,0 +1,26 @@
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public abstract class View<T extends Controller> extends JFrame implements ModelListener
{
protected Model m;
protected T c;
public View(Model m, T c) {
this.m = m;
this.c = c;
m.addListener(this);
this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
c.shutdown(); // Controller decides meaning.
}
});
}
@Override
public abstract void update();
}

View File

@@ -0,0 +1,19 @@
import javax.swing.JLabel;
public class ViewNumber extends View<Controller> {
private JLabel label;
public ViewNumber(Model m, Controller c) {
super(m, c);
this.setTitle("View Number");
this.setSize(150, 150);
label = new JLabel();
update(); // Initialize the label using the model.
this.add(label);
this.setVisible(true);
}
@Override
public void update() {
label.setText("Number of points is: " + m.numberOfPoints());
}
}