From a83aa09c6b52fa3cf4fa3b12160f99ea3be8f389 Mon Sep 17 00:00:00 2001 From: PiyushXCoder Date: Mon, 21 Jan 2019 07:24:55 +0530 Subject: [PATCH] update --- image.png | Bin 0 -> 9584 bytes pic.png | Bin 40959 -> 0 bytes src/paint/ColorChoose.java | 2 +- src/paint/Paint.form | 204 +++++++++++++++----- src/paint/Paint.java | 383 ++++++++++++++++++++++++++++--------- src/paint/PaintPanel.java | 278 ++++++++++++++++++++------- 6 files changed, 663 insertions(+), 204 deletions(-) create mode 100644 image.png delete mode 100644 pic.png diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d6c6c244f27d44621bb07a3112212adf00441e GIT binary patch literal 9584 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 literal 0 HcmV?d00001 diff --git a/pic.png b/pic.png deleted file mode 100644 index 94bf0e6f9982d3f34121dcf454290765d1a9f828..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40959 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 diff --git a/src/paint/ColorChoose.java b/src/paint/ColorChoose.java index b9cf5ba..74bd2f0 100644 --- a/src/paint/ColorChoose.java +++ b/src/paint/ColorChoose.java @@ -81,7 +81,7 @@ public class ColorChoose extends javax.swing.JDialog { }// //GEN-END:initComponents private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed - this.setVisible(false); + this.dispose(); }//GEN-LAST:event_jButton1ActionPerformed diff --git a/src/paint/Paint.form b/src/paint/Paint.form index a3a66e9..53a7e52 100644 --- a/src/paint/Paint.form +++ b/src/paint/Paint.form @@ -1,6 +1,6 @@ -
+ @@ -23,29 +23,25 @@ - - + + + - + - + + + - - - - - - - @@ -59,38 +55,15 @@ - - - - - - - - - - - - - - - + - - - - - - - - - - - - + + + @@ -104,6 +77,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -122,7 +136,7 @@ - + @@ -144,24 +158,122 @@ - + + + - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/paint/Paint.java b/src/paint/Paint.java index 6162052..f3df70c 100644 --- a/src/paint/Paint.java +++ b/src/paint/Paint.java @@ -23,9 +23,14 @@ */ package paint; -import javax.swing.JColorChooser; -import javax.swing.JComponent; -import javax.swing.colorchooser.DefaultColorSelectionModel; +import java.awt.Dimension; +import java.awt.FileDialog; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.imageio.ImageIO; /** * @@ -50,75 +55,42 @@ public class Paint extends javax.swing.JFrame { // //GEN-BEGIN:initComponents private void initComponents() { - paint = new paint.PaintPanel(); jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); + jToolBar1 = new javax.swing.JToolBar(); + jButton17 = new javax.swing.JButton(); + jButton12 = new javax.swing.JButton(); + jButton16 = new javax.swing.JButton(); + jSeparator1 = new javax.swing.JToolBar.Separator(); jButton5 = new javax.swing.JButton(); jButton6 = new javax.swing.JButton(); jButton7 = new javax.swing.JButton(); jButton8 = new javax.swing.JButton(); jButton9 = new javax.swing.JButton(); - jButton10 = new javax.swing.JButton(); + jSeparator2 = new javax.swing.JToolBar.Separator(); + jButton13 = new javax.swing.JButton(); + jButton14 = new javax.swing.JButton(); + jSeparator3 = new javax.swing.JToolBar.Separator(); + jButton1 = new javax.swing.JButton(); + jButton2 = new javax.swing.JButton(); + jButton3 = new javax.swing.JButton(); + jButton4 = new javax.swing.JButton(); + jButton11 = new javax.swing.JButton(); + jSeparator4 = new javax.swing.JToolBar.Separator(); jToggleButton1 = new javax.swing.JToggleButton(); + jButton10 = new javax.swing.JButton(); + jButton15 = new javax.swing.JButton(); + pan = new javax.swing.JPanel(); + scroll = new javax.swing.JScrollPane(); + paint = new paint.PaintPanel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); - paint.setBackground(new java.awt.Color(255, 255, 255)); - jPanel1.setBackground(new java.awt.Color(123, 189, 254)); jLabel1.setFont(new java.awt.Font("Noto Sans", 0, 18)); // NOI18N jLabel1.setText("Paint"); - jButton5.setText("pencil"); - jButton5.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButton5ActionPerformed(evt); - } - }); - - jButton6.setText("line"); - jButton6.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButton6ActionPerformed(evt); - } - }); - - jButton7.setText("rectangle"); - jButton7.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButton7ActionPerformed(evt); - } - }); - - jButton8.setText("oval"); - jButton8.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButton8ActionPerformed(evt); - } - }); - - jButton9.setText("circle"); - jButton9.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButton9ActionPerformed(evt); - } - }); - - jButton10.setBackground(new java.awt.Color(0, 0, 0)); - jButton10.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButton10ActionPerformed(evt); - } - }); - - jToggleButton1.setText("filled"); - jToggleButton1.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jToggleButton1ActionPerformed(evt); - } - }); - javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( @@ -126,50 +98,196 @@ public class Paint extends javax.swing.JFrame { .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jButton5) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jButton6) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jButton7) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jButton8) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jButton9) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 181, Short.MAX_VALUE) - .addComponent(jToggleButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jButton10, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap()) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel1) - .addComponent(jButton5) - .addComponent(jButton6) - .addComponent(jButton7) - .addComponent(jButton8) - .addComponent(jButton9) - .addComponent(jButton10, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jToggleButton1)) - .addGap(0, 0, 0)) + .addComponent(jLabel1) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); + jToolBar1.setRollover(true); + + jButton17.setText("new"); + jButton17.setFocusable(false); + jButton17.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + jButton17.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + jButton17.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton17ActionPerformed(evt); + } + }); + jToolBar1.add(jButton17); + + jButton12.setText("save"); + jButton12.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton12ActionPerformed(evt); + } + }); + jToolBar1.add(jButton12); + + jButton16.setText("open"); + jButton16.setFocusable(false); + jButton16.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + jButton16.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + jButton16.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton16ActionPerformed(evt); + } + }); + jToolBar1.add(jButton16); + jToolBar1.add(jSeparator1); + + jButton5.setText("pencil"); + jButton5.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton5ActionPerformed(evt); + } + }); + jToolBar1.add(jButton5); + + jButton6.setText("line"); + jButton6.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton6ActionPerformed(evt); + } + }); + jToolBar1.add(jButton6); + + jButton7.setText("rect"); + jButton7.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton7ActionPerformed(evt); + } + }); + jToolBar1.add(jButton7); + + jButton8.setText("oval"); + jButton8.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton8ActionPerformed(evt); + } + }); + jToolBar1.add(jButton8); + + jButton9.setText("circle"); + jButton9.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton9ActionPerformed(evt); + } + }); + jToolBar1.add(jButton9); + jToolBar1.add(jSeparator2); + + jButton13.setText("undo"); + jButton13.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton13ActionPerformed(evt); + } + }); + jToolBar1.add(jButton13); + + jButton14.setText("redo"); + jButton14.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton14ActionPerformed(evt); + } + }); + jToolBar1.add(jButton14); + jToolBar1.add(jSeparator3); + + jButton1.setText("1"); + jButton1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton1ActionPerformed(evt); + } + }); + jToolBar1.add(jButton1); + + jButton2.setText("2"); + jButton2.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton2ActionPerformed(evt); + } + }); + jToolBar1.add(jButton2); + + jButton3.setText("3"); + jButton3.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton3ActionPerformed(evt); + } + }); + jToolBar1.add(jButton3); + + jButton4.setText("4"); + jButton4.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton4ActionPerformed(evt); + } + }); + jToolBar1.add(jButton4); + + jButton11.setText("5"); + jButton11.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton11ActionPerformed(evt); + } + }); + jToolBar1.add(jButton11); + jToolBar1.add(jSeparator4); + + jToggleButton1.setText("fill"); + jToggleButton1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jToggleButton1ActionPerformed(evt); + } + }); + jToolBar1.add(jToggleButton1); + + jButton10.setBackground(new java.awt.Color(0, 0, 0)); + jButton10.setText("F"); + jButton10.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton10ActionPerformed(evt); + } + }); + jToolBar1.add(jButton10); + + jButton15.setBackground(new java.awt.Color(255, 255, 255)); + jButton15.setText("B"); + jButton15.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton15ActionPerformed(evt); + } + }); + jToolBar1.add(jButton15); + + pan.setLayout(new java.awt.BorderLayout()); + + paint.setBackground(new java.awt.Color(255, 255, 255)); + scroll.setViewportView(paint); + + pan.add(scroll, java.awt.BorderLayout.CENTER); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(paint, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 800, Short.MAX_VALUE) + .addComponent(pan, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) - .addComponent(paint, javax.swing.GroupLayout.DEFAULT_SIZE, 335, Short.MAX_VALUE) + .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, 0) + .addComponent(pan, javax.swing.GroupLayout.DEFAULT_SIZE, 452, Short.MAX_VALUE) .addGap(0, 0, 0)) ); @@ -198,17 +316,88 @@ public class Paint extends javax.swing.JFrame { private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton10ActionPerformed ColorChoose ch = new ColorChoose(this, true); - ch.col.setColor(paint.color); + ch.col.setColor(paint.fcolor); ch.setVisible(true); - paint.color = ch.col.getColor(); - jButton10.setBackground(paint.color); - ch.dispose(); + paint.fcolor = ch.col.getColor(); + jButton10.setBackground(paint.fcolor); }//GEN-LAST:event_jButton10ActionPerformed private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton1ActionPerformed paint.isfilled = jToggleButton1.isSelected(); }//GEN-LAST:event_jToggleButton1ActionPerformed + private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed + paint.thick = 1; + }//GEN-LAST:event_jButton1ActionPerformed + + private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed + paint.thick = 2; + }//GEN-LAST:event_jButton2ActionPerformed + + private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed + paint.thick = 3; + }//GEN-LAST:event_jButton3ActionPerformed + + private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed + paint.thick = 4; + }//GEN-LAST:event_jButton4ActionPerformed + + private void jButton11ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton11ActionPerformed + paint.thick = 5; + }//GEN-LAST:event_jButton11ActionPerformed + + private void jButton12ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton12ActionPerformed + paint.save(); + }//GEN-LAST:event_jButton12ActionPerformed + + private void jButton13ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton13ActionPerformed + paint.undo(); + }//GEN-LAST:event_jButton13ActionPerformed + + private void jButton14ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton14ActionPerformed + paint.redo(); + }//GEN-LAST:event_jButton14ActionPerformed + + private void jButton15ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton15ActionPerformed + ColorChoose ch = new ColorChoose(this, true); + ch.col.setColor(paint.bcolor); + ch.setVisible(true); + paint.bcolor = ch.col.getColor(); + jButton15.setBackground(paint.bcolor); + ch.dispose(); + }//GEN-LAST:event_jButton15ActionPerformed + + private void jButton16ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton16ActionPerformed + FileDialog fd = new FileDialog(this, "open", FileDialog.LOAD); + fd.setVisible(true); + fd.setMultipleMode(false); + if(fd.getFiles().length > 0) + { + File file = fd.getFiles()[0]; + paint.open(file); + repaintWorkArea(); + } + }//GEN-LAST:event_jButton16ActionPerformed + + private void jButton17ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton17ActionPerformed + paint.newfile(); + repaintWorkArea(); + }//GEN-LAST:event_jButton17ActionPerformed + + public void repaintWorkArea() + { + int w,h; + + if(pan.getWidth() > paint.width) w = paint.width + 3; + else w = pan.getWidth(); + + if(pan.getHeight() > paint.height) h = paint.height + 3; + else h = pan.getHeight(); + + scroll.setSize(w, h); + scroll.revalidate(); + } + /** * @param args the command line arguments */ @@ -223,7 +412,18 @@ public class Paint extends javax.swing.JFrame { } // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton jButton1; private javax.swing.JButton jButton10; + private javax.swing.JButton jButton11; + private javax.swing.JButton jButton12; + private javax.swing.JButton jButton13; + private javax.swing.JButton jButton14; + private javax.swing.JButton jButton15; + private javax.swing.JButton jButton16; + private javax.swing.JButton jButton17; + private javax.swing.JButton jButton2; + private javax.swing.JButton jButton3; + private javax.swing.JButton jButton4; private javax.swing.JButton jButton5; private javax.swing.JButton jButton6; private javax.swing.JButton jButton7; @@ -231,7 +431,14 @@ public class Paint extends javax.swing.JFrame { private javax.swing.JButton jButton9; private javax.swing.JLabel jLabel1; private javax.swing.JPanel jPanel1; + private javax.swing.JToolBar.Separator jSeparator1; + private javax.swing.JToolBar.Separator jSeparator2; + private javax.swing.JToolBar.Separator jSeparator3; + private javax.swing.JToolBar.Separator jSeparator4; private javax.swing.JToggleButton jToggleButton1; + private javax.swing.JToolBar jToolBar1; private paint.PaintPanel paint; + private javax.swing.JPanel pan; + private javax.swing.JScrollPane scroll; // End of variables declaration//GEN-END:variables } diff --git a/src/paint/PaintPanel.java b/src/paint/PaintPanel.java index ac01186..674d7a0 100644 --- a/src/paint/PaintPanel.java +++ b/src/paint/PaintPanel.java @@ -23,13 +23,22 @@ */ package paint; +import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; +import java.awt.Dimension; import java.awt.Graphics; +import java.awt.Graphics2D; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.imageio.ImageIO; /** * @@ -37,82 +46,204 @@ import java.util.ArrayList; */ public class PaintPanel extends Component implements MouseMotionListener, MouseListener { - public ArrayList parts = new ArrayList<>(); - public Color color = Color.BLACK; - public String shape = "pencil"; - public Boolean isfilled = false; + public int width , height; + public Color fcolor; + public Color bcolor; + public String shape; + public Boolean isfilled; + public int thick; + public BufferedImage it; + private ArrayList parts; + private ArrayList undo; + private Graphics2D gt; public PaintPanel() { + width = 600; + height = 300; + parts = new ArrayList<>(); + undo = new ArrayList<>(); + fcolor = Color.BLACK; + bcolor = Color.WHITE; + shape = "pencil"; + isfilled = false; + thick = 1; + it = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + gt = it.createGraphics(); + gt.setColor(Color.white); + gt.fillRect(0, 0, width, height); + this.addMouseListener(this); this.addMouseMotionListener(this); + } + + public void draw(Graphics2D gr, Part part) + { + gr.setColor(part.fcolor); + gr.setStroke(new java.awt.BasicStroke(part.thick)); + if(part.shape.equals("pencil")) + { + int x = part.cords.get(0).x; + int y = part.cords.get(0).y; + + + for(int i = 1; i < part.cords.size(); i++) + { + gr.drawLine(x, y, part.cords.get(i).x, part.cords.get(i).y); + x = part.cords.get(i).x; + y = part.cords.get(i).y; + } + } + else if(part.shape.equals("line")) + { + if(part.cords.size() > 1) gr.drawLine(part.cords.get(0).x, part.cords.get(0).y, part.cords.get(1).x, part.cords.get(1).y); + } + else if(part.shape.equals("rect")) + { + if(part.cords.size() > 1) + { + int x1,y1,x2,y2; + x1 = Math.min(part.cords.get(0).x, part.cords.get(1).x); + y1 = Math.min(part.cords.get(0).y, part.cords.get(1).y); + x2 = Math.max(part.cords.get(0).x, part.cords.get(1).x); + y2 = Math.max(part.cords.get(0).y, part.cords.get(1).y); + if(part.isfilled) { + gr.setColor(part.bcolor); + gr.fillRect(x1,y1,x2 - x1,y2 - y1); + gr.setColor(part.fcolor); + gr.drawRect(x1,y1,x2 - x1,y2 - y1); + } + else gr.drawRect(x1,y1,x2 - x1,y2 - y1); + } + } + else if(part.shape.equals("oval")) + { + if(part.cords.size() > 1) + { + int x1,y1,x2,y2; + x1 = Math.min(part.cords.get(0).x, part.cords.get(1).x); + y1 = Math.min(part.cords.get(0).y, part.cords.get(1).y); + x2 = Math.max(part.cords.get(0).x, part.cords.get(1).x); + y2 = Math.max(part.cords.get(0).y, part.cords.get(1).y); + if(part.isfilled) { + gr.setColor(part.bcolor); + gr.fillOval(x1,y1,x2 - x1,y2 - y1); + gr.setColor(part.fcolor); + gr.drawOval(x1,y1,x2 - x1,y2 - y1); + } + else gr.drawOval(x1,y1,x2 - x1,y2 - y1); + } + } + else if(part.shape.equals("circle")) + { + if(part.cords.size() > 1) + { + int x1,y1,x2,y2,r; + x1 = Math.min(part.cords.get(0).x, part.cords.get(1).x); + y1 = Math.min(part.cords.get(0).y, part.cords.get(1).y); + x2 = Math.max(part.cords.get(0).x, part.cords.get(1).x); + y2 = Math.max(part.cords.get(0).y, part.cords.get(1).y); + r = (int)Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)); + if(part.isfilled) { + gr.setColor(part.bcolor); + gr.fillOval(part.cords.get(0).x - r,part.cords.get(0).y - r,2 * r,2 * r); + gr.setColor(part.fcolor); + gr.drawOval(part.cords.get(0).x - r,part.cords.get(0).y - r,2 * r,2 * r); + } + else gr.drawOval(part.cords.get(0).x - r,part.cords.get(0).y - r,2 * r,2 * r); + } + } + } + + public void paintToBuffer() + { + if(parts.size() > 10) + { + Part part = parts.get(0); + draw(gt, part); + parts.remove(0); + } + } + + public void save() + { + BufferedImage buf = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + Graphics2D g = buf.createGraphics(); + g.drawImage(it, 0,0,null); + for(Part part : parts) + { + draw(g, part); + } + try { + ImageIO.write(buf, "png", new File("image.png")); + } catch (IOException ex) { + Logger.getLogger(PaintPanel.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public void open(File file) + { + BufferedImage buff = null; + try { + buff = ImageIO.read(file); + } catch (IOException ex) { + Logger.getLogger(Paint.class.getName()).log(Level.SEVERE, null, ex); + } + width = buff.getWidth(); + height = buff.getHeight(); + this.setPreferredSize(new Dimension(width, height)); + it = buff; + parts = new ArrayList<>(); + undo = new ArrayList<>(); + this.repaint(); + } + + public void newfile() + { + parts = new ArrayList<>(); + undo = new ArrayList<>(); + it = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + gt = it.createGraphics(); + gt.setColor(Color.white); + gt.fillRect(0, 0, width, height); + width = 600; + height = 300; + this.setSize(new Dimension(width, height)); + this.repaint(); + } + + public void undo() + { + if(parts.size() > 0) + { + undo.add(parts.get(parts.size()-1)); + parts.remove(parts.size()-1); + this.repaint(); + } + } + + public void redo() + { + if(undo.size() > 0) + { + parts.add(undo.get(undo.size()-1)); + undo.remove(undo.size()-1); + this.repaint(); + } } @Override public void paint(Graphics g) { + Graphics2D gr = (Graphics2D)g; + gr.drawImage(it, 0,0,null); for(Part part : parts) { - g.setColor(part.color); - if(part.shape.equals("pencil")) - { - int x = part.cords.get(0).x; - int y = part.cords.get(0).y; - - - for(int i = 1; i < part.cords.size(); i++) - { - g.drawLine(x, y, part.cords.get(i).x, part.cords.get(i).y); - x = part.cords.get(i).x; - y = part.cords.get(i).y; - } - } - else if(part.shape.equals("line")) - { - if(part.cords.size() > 1) g.drawLine(part.cords.get(0).x, part.cords.get(0).y, part.cords.get(1).x, part.cords.get(1).y); - } - else if(part.shape.equals("rect")) - { - if(part.cords.size() > 1) - { - int x1,y1,x2,y2; - x1 = Math.min(part.cords.get(0).x, part.cords.get(1).x); - y1 = Math.min(part.cords.get(0).y, part.cords.get(1).y); - x2 = Math.max(part.cords.get(0).x, part.cords.get(1).x); - y2 = Math.max(part.cords.get(0).y, part.cords.get(1).y); - if(part.isfilled) g.fillRect(x1,y1,x2 - x1,y2 - y1); - else g.drawRect(x1,y1,x2 - x1,y2 - y1); - } - } - else if(part.shape.equals("oval")) - { - if(part.cords.size() > 1) - { - int x1,y1,x2,y2; - x1 = Math.min(part.cords.get(0).x, part.cords.get(1).x); - y1 = Math.min(part.cords.get(0).y, part.cords.get(1).y); - x2 = Math.max(part.cords.get(0).x, part.cords.get(1).x); - y2 = Math.max(part.cords.get(0).y, part.cords.get(1).y); - if(part.isfilled) g.fillOval(x1,y1,x2 - x1,y2 - y1); - else g.drawOval(x1,y1,x2 - x1,y2 - y1); - } - } - else if(part.shape.equals("circle")) - { - if(part.cords.size() > 1) - { - int x1,y1,x2,y2,r; - x1 = Math.min(part.cords.get(0).x, part.cords.get(1).x); - y1 = Math.min(part.cords.get(0).y, part.cords.get(1).y); - x2 = Math.max(part.cords.get(0).x, part.cords.get(1).x); - y2 = Math.max(part.cords.get(0).y, part.cords.get(1).y); - r = (int)Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)); - if(part.isfilled) g.fillOval(part.cords.get(0).x - r,part.cords.get(0).y - r,2 * r,2 * r); - else g.drawOval(part.cords.get(0).x - r,part.cords.get(0).y - r,2 * r,2 * r); - } - } + draw(gr, part); } + + paintToBuffer(); } @Override @@ -138,7 +269,8 @@ public class PaintPanel extends Component implements MouseMotionListener, MouseL @Override public void mousePressed(MouseEvent e) { - parts.add(new Part(shape, color,isfilled)); + if(undo.size() > 0) undo = new ArrayList<>(); + parts.add(new Part(shape, fcolor, bcolor,isfilled, thick)); parts.get(parts.size() - 1).cords.add(new Cord(e.getX(), e.getY())); this.repaint(); } @@ -169,29 +301,37 @@ class Part { String shape; ArrayList cords; - Color color; + Color fcolor; + Color bcolor; + int thick; Boolean isfilled; public Part() { this.shape = "pencil"; this.cords = new ArrayList<>(); - this.color = Color.black; + this.fcolor = Color.black; + this.bcolor = Color.white; this.isfilled = false; + this.thick = 1; } - public Part(String shape, Color color, Boolean isfilled) + public Part(String shape, Color fcolor,Color bcolor, Boolean isfilled, int thick) { this.shape = shape; this.cords = new ArrayList<>(); - this.color = color; + this.fcolor = fcolor; + this.bcolor = bcolor; this.isfilled = isfilled; + this.thick = thick; } - public Part(String shape, ArrayList cords, Color color, Boolean isfilled) + public Part(String shape, ArrayList cords, Color color, Boolean isfilled, int thick) { this.shape = shape; this.cords = cords; - this.color = color; + this.fcolor = color; + this.bcolor = bcolor; this.isfilled = isfilled; + this.thick = thick; } }