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 @@
public class Controller{
//instance variable
protected Model m;
//constructor
public Controller(Model m) {
this.m = m;
}
}

View File

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

View File

@@ -0,0 +1,55 @@
import java.awt.Point;
import java.util.ArrayList;
public class Model {
//instance variables
private ArrayList<Point> points;
private ArrayList<ModelListener> listeners;
//constructor
public Model() {
points = new ArrayList<Point>();
listeners = new ArrayList<ModelListener>();
}
//methods
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();
}
}
private void notifyListeners() {
for(ModelListener l: listeners) {
l.update();
}
}
public int numberOfPoints() {
return points.size();
}
//test
public static void testModel() {
}
}

View File

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

View File

@@ -0,0 +1,46 @@
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.JFrame;
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);
}
public void update() {
repaint();
}
}

View File

@@ -0,0 +1,45 @@
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 {
//instance variables
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);
g.setColor(Color.RED);
if(m.getPoints().size() == 1) {
Point p = m.getPoints().get(0);
g.drawRect((int)p.getX(), (int)p.getY(), 1, 1);
}
else {
for(int i = 1; i < m.getPoints().size(); i++) {
Point start = m.getPoints().get(i - 1);
Point end = m.getPoints().get(i);
g.drawLine((int)start.getX(), (int)start.getY(),
(int)end.getX(), (int)end.getY());
}
}
}
}

View File

@@ -0,0 +1,16 @@
public class Start {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Model m = new Model(); // Single shared 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,8 @@
public class Test {
public static void main(String[] args) {
Model.testModel();
}
}

View File

@@ -0,0 +1,20 @@
import javax.swing.JFrame;
public abstract class View<T extends Controller> extends JFrame implements ModelListener{
//instance variables
protected Model m;
protected T c;
//constructor
public View(Model m, T c) {
this.m = m;
this.c = c;
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
m.addListener(this);
this.setVisible(true);
}
@Override
public abstract void update();
}

View File

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