YauhenMardan

WindowApp.java

Dec 1st, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.58 KB | None | 0 0
  1. package com.company;
  2.  
  3. import javax.imageio.ImageIO;
  4. import javax.swing.*;
  5. import java.awt.*;
  6. import java.awt.event.*;
  7. import java.awt.image.BufferedImage;
  8. import java.io.File;
  9. import java.io.IOException;
  10. import javax.swing.filechooser.FileNameExtensionFilter;
  11.  
  12. public class WindowApp extends JFrame {
  13.     private final static int BUTTONS_QUANTITY=3;
  14.     private final static int WINDOW_SIZE_X=1200;
  15.     private final static int WINDOW_SIZE_Y=800;
  16.  
  17.     private JScrollPane scrollPane;
  18.     private JPanel drawPanel;
  19.     private JPanel menuPanel;
  20.     private JPanel mainPanel;
  21.     private JLabel label;
  22.     private JButton openImageButton, saveImageButton;
  23.     private JRadioButton colorRadioButtons[];
  24.     private ButtonGroup colorGroup;
  25.  
  26.     private int prevMouseCoordX;
  27.     private int prevMouseCoordY;
  28.  
  29.     private BufferedImage dbImage=null;
  30.  
  31.     WindowApp(){
  32.         //mainPanel
  33.         mainPanel=new JPanel();
  34.         mainPanel.setLayout(new BorderLayout());
  35.         //drawPanel
  36.         drawPanel = new JPanel(){
  37.             @Override
  38.             public void paintComponent(Graphics g){
  39.                 super.paintComponent(g);
  40.                 g.drawImage(dbImage,0,0,this);
  41.             }
  42.         };
  43.         drawPanel.setDoubleBuffered(true);
  44.         drawPanel.setFocusable(true);
  45.         drawPanel.setBackground(Color.white);
  46.         //menuPanel
  47.         menuPanel=new JPanel();
  48.         menuPanel.setLayout(new FlowLayout());
  49.         mainPanel.add(menuPanel,BorderLayout.NORTH);
  50.         //scrollPane
  51.         scrollPane=new JScrollPane(drawPanel);
  52.         mainPanel.add(scrollPane,BorderLayout.CENTER);
  53.         //label
  54.         label=new JLabel("Select color: ");
  55.         menuPanel.add(label,BorderLayout.NORTH);
  56.         //window
  57.         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  58.         setPreferredSize(new Dimension(WINDOW_SIZE_X,WINDOW_SIZE_Y));
  59.         setResizable(false);
  60.         //setMinimumSize(new Dimension(MIN_WINDOW_SIZE_X,MIN_WINDOW_SIZE_Y));
  61.         //buttons
  62.         colorRadioButtons=new JRadioButton[BUTTONS_QUANTITY];
  63.         colorGroup=new ButtonGroup();
  64.         for(int i=0;i<BUTTONS_QUANTITY;i++){
  65.             colorRadioButtons[i]=new JRadioButton(getColorString(i));
  66.             colorGroup.add(colorRadioButtons[i]);
  67.             menuPanel.add(colorRadioButtons[i]);
  68.         }
  69.         colorRadioButtons[0].setSelected(true);
  70.         openImageButton=new JButton("Open image...");
  71.         saveImageButton=new JButton("Save image...");
  72.         menuPanel.add(openImageButton);
  73.         menuPanel.add(saveImageButton);
  74.         //
  75.         setContentPane(mainPanel);
  76.         pack();
  77.         //listeners
  78.         drawPanel.addMouseListener(new MouseAdapter() {
  79.             @Override
  80.             public void mousePressed(MouseEvent e) {
  81.                 super.mousePressed(e);
  82.                 prevMouseCoordX=e.getX();
  83.                 prevMouseCoordY=e.getY();
  84.             }
  85.         });
  86.         drawPanel.addMouseMotionListener(new MouseMotionAdapter() {
  87.             @Override
  88.             public void mouseDragged(MouseEvent e) {
  89.                 if(dbImage==null) {
  90.                     dbImage = new BufferedImage(drawPanel.getWidth(),drawPanel.getHeight(),BufferedImage.TYPE_3BYTE_BGR);//createImage(WINDOW_SIZE_X, WINDOW_SIZE_Y);
  91.                     Graphics dbStartGraphics=dbImage.getGraphics();
  92.                     dbStartGraphics.setColor(Color.WHITE);
  93.                     dbStartGraphics.fillRect(0,0,drawPanel.getWidth(),drawPanel.getHeight());
  94.                 }
  95.                 Graphics dbGraphics=dbImage.getGraphics();
  96.                 dbGraphics.setColor(getColorButtonString());
  97.                 dbGraphics.drawLine(prevMouseCoordX, prevMouseCoordY, e.getX(), e.getY());
  98.                 prevMouseCoordX=e.getX();
  99.                 prevMouseCoordY=e.getY();
  100.                 repaint();
  101.             }
  102.         });
  103.         openImageButton.addActionListener(new ActionListener() {
  104.             @Override
  105.             public void actionPerformed(ActionEvent e) {
  106.                 //File chooser
  107.                 JFileChooser fileOpen = new JFileChooser();
  108.                 FileNameExtensionFilter filter = new FileNameExtensionFilter(
  109.                         "JPG Images", "jpg");
  110.                 fileOpen.setFileFilter(filter);
  111.                 int ret = fileOpen.showOpenDialog(null);
  112.                 if(ret ==JFileChooser.APPROVE_OPTION) {
  113.                     try {
  114.                         dbImage = ImageIO.read(fileOpen.getSelectedFile());
  115.                     } catch (IOException e1) {
  116.                         JOptionPane.showMessageDialog(openImageButton, "Cannot open image.", "Waring", JOptionPane.WARNING_MESSAGE);
  117.                     }
  118.                     drawPanel.setPreferredSize(new Dimension(dbImage.getWidth(), dbImage.getHeight()));
  119.                     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
  120.                     scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
  121.                     repaint();
  122.                 }
  123.             }
  124.         });
  125.         saveImageButton.addActionListener(new ActionListener() {
  126.             @Override
  127.             public void actionPerformed(ActionEvent e) {
  128.                 JFileChooser fileSave = new JFileChooser();
  129.                 if(fileSave.showSaveDialog(null)==JFileChooser.APPROVE_OPTION){
  130.                     try {
  131.                         File file = new File(fileSave.getSelectedFile().getPath()+".jpg");
  132.                         if(dbImage!=null) {
  133.                             ImageIO.write( dbImage, "jpg", file);
  134.                         }
  135.                         else{
  136.                             JOptionPane.showMessageDialog(openImageButton, "Cannot save empty image.","Waring", JOptionPane.WARNING_MESSAGE);
  137.                         }
  138.                     }
  139.                     catch (IOException e1){
  140.                         JOptionPane.showMessageDialog(openImageButton, "Cannot save image.","Waring", JOptionPane.WARNING_MESSAGE);
  141.                     }
  142.                 }
  143.             }
  144.         });
  145.     }
  146.     private String getColorString(int i){
  147.         if(i==0)
  148.             return "red";
  149.         if(i==1)
  150.             return "green";
  151.         if(i==2)
  152.             return "blue";
  153.         return "black";
  154.     }
  155.     private Color getColorButtonString(){
  156.         if(colorRadioButtons[0].isSelected())
  157.             return Color.red;
  158.         if(colorRadioButtons[1].isSelected())
  159.             return Color.green;
  160.         if(colorRadioButtons[2].isSelected())
  161.             return Color.blue;
  162.         return Color.black;
  163.     }
  164. }
Advertisement
Add Comment
Please, Sign In to add comment