Changing JPanel Graphics g color drawing line

后端 未结 3 1330
余生分开走
余生分开走 2020-11-27 22:03

i have a program similar to paint. and that i am trying to implement a change pen color however when i change the color, everything currently drawn is changed to the color R

3条回答
  •  青春惊慌失措
    2020-11-27 22:51

    Thanks hovercraft, i've done it looking at your code and fiddling around lol.

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.image.BufferedImage;
    import java.util.ArrayList;
    import javax.swing.BorderFactory;
    import javax.swing.JPanel;
    
    public class STDrawingArea extends JPanel {
        /**
         * 
         */
        private static final int DA_WIDTH = 700;
        private static final int DA_HEIGHT = 500;
        private static final Color DA_BGCOLOR = Color.WHITE;
        private static final long serialVersionUID = 1L;
    
    
        ArrayList points = new ArrayList();
    
        private Color currentColor;
        BufferedImage bImage = new BufferedImage(DA_WIDTH, DA_HEIGHT, BufferedImage.TYPE_INT_RGB);
    
        public STDrawingArea()
        {
             setBorder(BorderFactory.createLineBorder(Color.black));
    
             //Basic Settings for bImage
             Graphics g2d = bImage.getGraphics();
             g2d.setColor(DA_BGCOLOR);
             g2d.fillRect(0, 0, DA_WIDTH, DA_HEIGHT);
             g2d.dispose();
    
             addMouseListener(new MouseAdapter(){
                 public void mousePressed(MouseEvent e)
                 {
                    points.clear();
                    points.add(e.getPoint());
                 }
             });
    
             addMouseMotionListener(new MouseAdapter() {
                public void mouseDragged(MouseEvent e) 
                {
                    points.add(e.getPoint());
                    repaint();
                }
    
                 }); 
    
             addMouseListener(new MouseAdapter(){
                 public void mouseReleased(MouseEvent e)
                 {
                     points.add(e.getPoint());
                     points.clear();
                     System.out.println("mouseReleased X: "+e.getX()+"mouseReleased Y: "+e.getY());
                     repaint();
                 }
             });
        }
    
        @Override
        public Dimension getPreferredSize() {
            return new Dimension(DA_WIDTH,DA_HEIGHT);
        }
    
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            drawIntoBufferedImage();
            g.drawImage(bImage,0,0,null);
            freehandLines(g);
    
        }
        public void drawIntoBufferedImage()
        {
            Graphics g = bImage.getGraphics();
            freehandLines(g);
            g.dispose();
        }
    
        public void freehandLines(Graphics g)
        {
             if(points != null && points.size() > 1)
             {
    
                 g.setColor(getCurrentColor());
                  for(int i = 0; i < points.size()-1;i++)
                   {
                       int x1 = points.get(i).x;
                       int y1 = points.get(i).y;
                       int x2 = points.get(i+1).x;
                       int y2 = points.get(i+1).y;
                       g.drawLine(x1, y1, x2, y2);
                   }
             }
        }
        //clear drawings method
        public void clearDrawings()
        {
            if(points!=null)
            {
                points.clear();
                Graphics g = bImage.getGraphics();
                g.setColor(DA_BGCOLOR);
                g.fillRect(0, 0, DA_WIDTH, DA_WIDTH);
                g.dispose();
                repaint();
            }
    
        }
    
        public void setCurrentColor(Color currentColor) {
            if(currentColor == null)
            {
                currentColor = Color.BLACK;
            }else{
                this.currentColor = currentColor;
            }
    
        }
    
        public Color getCurrentColor() {
            if (currentColor == null)
            return Color.BLACK;
            else
            return currentColor;
        }
    }
    

    main class

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    
    public class STTestMain extends JFrame {
        STDrawingArea drawingArea = new STDrawingArea();
        public STTestMain()
        {
            //JFrame settings
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setTitle("Spelling Trainer");
            setResizable(false);
            setVisible(true);
    
    
            //Panel of buttons
            JPanel buttonContainer = new JPanel();
            JButton btnRedPen = new JButton("Red Pen");
            JButton btnGreenPen = new JButton("Green Pen");
            JButton btnClear = new JButton("Clear");
            buttonContainer.add(btnRedPen);
            buttonContainer.add(btnGreenPen);
            buttonContainer.add(btnClear);
            //Drawing Area instantiation
    
    
            //Adding things to JFrame
            getContentPane().add(drawingArea);
            getContentPane().add(buttonContainer,BorderLayout.PAGE_END);
            pack();
    
    
            //button listener
            btnRedPen.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    drawingArea.setCurrentColor(Color.RED);
                }
            });
    
            btnGreenPen.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    drawingArea.setCurrentColor(Color.GREEN);
                }
            });
    
            btnClear.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    drawingArea.clearDrawings();
                }
            });
        }
    
    
        public static void main(String args[])
        {
            STTestMain test = new STTestMain();
        }
    
    }
    

提交回复
热议问题