M11 Java Paint App Session 2
M11 Java Paint App Session 2
Group 131
added extra:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
// Predefined colors
private final Color[] colors = {
Color.BLACK, Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW,
Color.ORANGE, Color.PINK, Color.CYAN, Color.MAGENTA,
Color.GRAY
};
public PaintApp() {
setTitle("Paint Application - Session 2");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
initializeComponents();
setupLayout();
setSize(800, 600);
setLocationRelativeTo(null);
setVisible(true);
}
// Pencil tool
JToggleButton pencilBtn = new JToggleButton("Pencil");
pencilBtn.setSelected(true);
pencilBtn.addActionListener(e -> currentTool = "PENCIL");
toolGroup.add(pencilBtn);
toolPanel.add(pencilBtn);
// Rectangle tool
JToggleButton rectangleBtn = new JToggleButton("Rectangle");
rectangleBtn.addActionListener(e -> currentTool = "RECTANGLE");
toolGroup.add(rectangleBtn);
toolPanel.add(rectangleBtn);
add(topPanel, BorderLayout.NORTH);
add(new JScrollPane(drawingPanel), BorderLayout.CENTER);
}
public DrawingPanel() {
setPreferredSize(new Dimension(800, 600));
setBackground(backgroundColor);
// Initialize canvas
canvas = new BufferedImage(800, 600,
BufferedImage.TYPE_INT_RGB);
g2d = canvas.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(backgroundColor);
g2d.fillRect(0, 0, 800, 600);
addMouseListeners();
}
@Override
public void mouseReleased(MouseEvent e) {
if (isDrawing) {
endPoint = e.getPoint();
switch (currentTool) {
case "RECTANGLE":
drawRectangle();
break;
case "OVAL":
drawOval(); // IMPLEMENTED
break;
}
isDrawing = false;
repaint();
}
}
});
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
if (isDrawing && (currentTool.equals("PENCIL") ||
currentTool.equals("ERASER"))) {
drawLine(startPoint, e.getPoint());
startPoint = e.getPoint();
repaint();
}
}
});
}
g2d.setColor(drawColor);
g2d.setStroke(new BasicStroke(strokeWidth,
BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
g2d.fillOval(point.x - (int) (strokeWidth / 2), point.y -
(int) (strokeWidth / 2),
(int) strokeWidth, (int) strokeWidth);
}
g2d.setColor(drawColor);
g2d.setStroke(new BasicStroke(strokeWidth,
BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
g2d.drawLine(start.x, start.y, end.x, end.y);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(canvas, 0, 0, null);
}
}