M11 Java Paint App Session 4
M11 Java Paint App Session 4
Group 131
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.border.TitledBorder;
public PaintApp() {
setTitle(" 🚀 PAINT APP🎨");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
initializeComponents();
setupLayout();
setSize(1000, 700);
setLocationRelativeTo(null);
setVisible(true);
toolGroup.add(btn);
toolPanel.add(btn);
}
private void createColorButtons() {
for (Color color : colors) {
JButton colorBtn = new JButton();
colorBtn.setBackground(color);
colorBtn.setPreferredSize(new Dimension(35, 35));
colorBtn.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
currentColor = color;
rainbowMode = false;
updateStrokeColorDisplay();
}
}
});
colorBtn.setBorder(BorderFactory.createRaisedBevelBorder());
colorBtn.setToolTipText("Left click for stroke color: " +
getColorName(color));
colorPanel.add(colorBtn);
}
}
strokeColorDisplay.setBorder(BorderFactory.createTitledBorder("Current
Stroke"));
colorPanel.add(strokeColorDisplay);
fillColorDisplay.setBorder(BorderFactory.createTitledBorder("Current
Fill"));
fillColorPanel.add(fillColorDisplay);
}
topPanel.add(epicPanel, BorderLayout.SOUTH);
add(topPanel, BorderLayout.NORTH);
add(new JScrollPane(drawingPanel), BorderLayout.CENTER);
// Panel de estado épico
JLabel statusLabel = new JLabel(" 🎨 Listo para crear ARTE |
Herramienta: Lápiz | Modo: Normal");
statusLabel.setOpaque(true);
statusLabel.setBackground(new Color(20, 20, 20));
statusLabel.setForeground(Color.CYAN);
statusLabel.setBorder(BorderFactory.createEmptyBorder(5, 10, 5,
10));
add(statusLabel, BorderLayout.SOUTH);
}
public DrawingPanel() {
setPreferredSize(new Dimension(800, 600));
setBackground(backgroundColor);
addMouseListeners();
}
if (currentTool.equals("PENCIL") ||
currentTool.equals("ERASER")) {
drawPoint(e.getPoint());
repaint();
}
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (isDrawing && SwingUtilities.isLeftMouseButton(e))
{
endPoint = e.getPoint();
switch (currentTool) {
case "RECTANGLE":
drawRectangle();
break;
case "OVAL":
drawOval();
break;
case "STAR":
drawStar(); // ¡ÉPICO!
break;
case "HEART":
drawHeart(); // ¡SÚPER ÉPICO!
break;
case "LIGHTNING":
drawLightning(); // ¡MEGA ÉPICO!
break;
case "SPIRAL":
drawSpiral(); // ¡ULTRA ÉPICO!
break;
}
isDrawing = false;
repaint();
}
}
});
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
if (isDrawing && SwingUtilities.isLeftMouseButton(e)
&& (currentTool.equals("PENCIL") ||
currentTool.equals("ERASER"))) {
drawLine(startPoint, e.getPoint());
startPoint = e.getPoint();
repaint();
}
}
});
}
g2d.setColor(drawColor);
int size = currentTool.equals("ERASER") ? brushSize :
strokeWidth;
g2d.setStroke(new BasicStroke(size, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND));
g2d.fillOval(point.x - size / 2, point.y - size / 2, size,
size);
}
g2d.setColor(drawColor);
int size = currentTool.equals("ERASER") ? brushSize :
strokeWidth;
g2d.setStroke(new BasicStroke(size, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND));
g2d.drawLine(start.x, start.y, end.x, end.y);
}
if (rainbowMode)
g2d.setColor(getRainbowColor());
g2d.drawLine(lastPoint.x, lastPoint.y, x, y);
lastPoint = new Point(x, y);
}
}
g2d.setColor(sparkleColor);
g2d.fillOval(x, y, 3, 3);
switch (shape) {
case 0:
g2d.drawRect(x, y, size, size);
break;
case 1:
g2d.drawOval(x, y, size, size);
break;
case 2:
g2d.drawLine(x, y, x + size, y + size);
break;
case 3:
g2d.fillOval(x, y, size / 2, size / 2);
break;
}
}
repaint();
JOptionPane.showMessageDialog(PaintApp.this, " 🎲 ¡ARTE RANDOM
GENERADO! 🎨");
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(canvas, 0, 0, null);
}
}