package com.cube;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
ArrayList<Geometric> geoObj = new ArrayList();
JFrame jFrame = new JFrame();
PaintPanel panel = new PaintPanel();
int clickWhich = 0;
int selection;
ImageIcon imgIcon;
boolean isSel = false;
boolean isOpen = false;
Color color;
String inputText = "";
public static void main(String[] args) {
new Main();
}
class PaintPanel extends JPanel {
class Line extends Geometric {
Line(Point x, Point y, Color c){
pointFirst = x;
pointSecond = y;
defaultColor = c;
height = (pointFirst.y - pointSecond.y);
width = (pointFirst.x - pointSecond.x);
}
@Override
void drawPanel(Graphics g) {
g.setColor(defaultColor);
g.drawLine(pointFirst.x, pointFirst.y, pointFirst.x - width, pointFirst.y - height);
}
@Override
boolean clickTest(Point p) {
int min_xpos = Math.min(pointFirst.x, pointSecond.x);
int max_ypos = Math.max(pointFirst.y, pointSecond.y);
int min_ypos = Math.min(pointFirst.y, pointSecond.y);
int max_xpos = Math.max(pointFirst.x, pointSecond.x);
if (p.x >= min_xpos && p.y >= min_ypos && p.x <= max_xpos && p.y <= max_ypos) {
panel.setCursor(new Cursor(Cursor.MOVE_CURSOR));
return true;
} else
return false;
}
}
class Rectangle extends Geometric {
Rectangle(Point x, Point y, Color c) {
strokeWid = 10;
pointFirst = x;
pointSecond = y;
defaultColor = c;
height = Math.abs(pointFirst.y - pointSecond.y);
width = Math.abs(pointFirst.x - pointSecond.x);
}
@Override
void drawPanel(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(defaultColor);
Stroke stroke = new BasicStroke(strokeWid, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
g2d.setStroke(stroke);
g2d.drawRect(Math.min(pointFirst.x, pointSecond.x), Math.min(pointFirst.y, pointSecond.y),
Math.abs(pointSecond.x - pointFirst.x), Math.abs(pointSecond.y - pointFirst.y));
}
@Override
boolean clickTest(Point p) {
int min_xpos = Math.min(pointFirst.x, pointSecond.x);
int max_ypos = Math.max(pointFirst.y, pointSecond.y);
int min_ypos = Math.min(pointFirst.y, pointSecond.y);
int max_xpos = Math.max(pointFirst.x, pointSecond.x);
if (p.x >= min_xpos && p.y >= min_ypos && p.x <= max_xpos && p.y <= max_ypos) {
panel.setCursor(new Cursor(Cursor.MOVE_CURSOR));
return true;
} else
return false;
}
}
class Circle extends Geometric {
Circle(Point x, Point y, Color c) {
strokeWid = 10;
pointFirst = x;
pointSecond = y;
defaultColor = c;
height = Math.abs(pointFirst.y - pointSecond.y);
width = Math.abs(pointFirst.x - pointSecond.x);
}
@Override
void drawPanel(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(defaultColor);
Stroke stroke = new BasicStroke(strokeWid, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
g2d.setStroke(stroke);
g2d.drawOval(Math.min(pointFirst.x, pointSecond.x), Math.min(pointFirst.y, pointSecond.y),
Math.abs(pointSecond.x - pointFirst.x), Math.abs(pointSecond.x - pointFirst.x));
// Stroke stroke = new BasicStroke(strokeWid);
// g.setStroke(stroke);
}
@Override
boolean clickTest(Point p) {
int min_xpos = Math.min(pointFirst.x, pointSecond.x);
int max_ypos = Math.max(pointFirst.y, pointSecond.y);
int min_ypos = Math.min(pointFirst.y, pointSecond.y);
int max_xpos = Math.max(pointFirst.x, pointSecond.x);
if (p.x >= min_xpos && p.y >= min_ypos && p.x <= max_xpos && p.y <= max_ypos) {
panel.setCursor(new Cursor(Cursor.MOVE_CURSOR));
return true;
} else
return false;
}
}
class Text extends Geometric {
String str;
//int size;
Text(Point x, Color c, String s) {
pointFirst = x;
defaultColor = c;
str = s;
size = 10; //TODO:
}
@Override
void drawPanel(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(defaultColor);
g2d.setFont(new Font("BOLD", Font.BOLD, size));
Stroke stroke = new BasicStroke(strokeWid, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
g2d.setStroke(stroke);
g2d.drawString(str, pointFirst.x, pointFirst.y);
}
@Override
boolean clickTest(Point p) {
if (p.x >= pointFirst.x && p.y <= pointFirst.y &&
p.x <= pointFirst.x + 10 * str.length() && p.y >= pointFirst.y - 10) {
panel.setCursor(new Cursor(Cursor.MOVE_CURSOR));
return true;
} else
return false;
}
}
boolean on = false;
Point pointFirst, pointSecond, point;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (isOpen) {
g.drawImage(imgIcon.getImage(), 0, 0, 760, 480, jFrame);
}
Iterator<Geometric> it = geoObj.iterator();
while (it.hasNext()) {
Geometric tmp = it.next();
g.setColor(tmp.defaultColor);
tmp.drawPanel(g);
}
if (on) {
if (clickWhich == 1) {
Line tmp1 = new Line(pointFirst, point, color);
tmp1.drawPanel(g);
}
if (clickWhich == 2) {
Circle tmp1 = new Circle(pointFirst, point, color);
tmp1.drawPanel(g);
}
if (clickWhich == 3) {
Rectangle tmp1 = new Rectangle(pointFirst, point, color);
tmp1.drawPanel(g);
}
if (clickWhich == 4) {
}
}
}
PaintPanel() {
color = Color.BLACK;
setBackground(Color.WHITE);
setFocusable(true);
this.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
panel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
@Override
public void mousePressed(MouseEvent e) {
on = !on;
if (clickWhich == 0) {
Iterator<Geometric> it = geoObj.iterator();
int i = 0;
isSel = false;
while (it.hasNext()) {