Here is a sample Java program which is used for freehand drawing with mouse. Features include: - Colors: You can draw in different colors. The supported colors are Black, Blue, Cyan, Gray, Green, Magenta, Orange, Pink, Red, White and Yellow. - Pointer Location: The program always shows the mouse pointer location in the title bar. The title is changed dynamically for the mouse movement. This is not a serous program – it’s a fun. You can use it for education purpose only to learn about how to draw in Java.
Output of the program
Here is the full source code:
import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.WindowConstants; public class FreehandDrawing extends JFrame { private static final long serialVersionUID = 1L; public FreehandDrawing() { initComponents(); Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize(); setSize(dimension.width, dimension.height - 30); } private void initComponents() { colorButtonGroup = new ButtonGroup(); drawingPanel = new JPanel(); colorPanel = new JPanel(); radioButtonBlack = new JRadioButton(); radioButtonBlue = new JRadioButton(); radioButtonCyan = new JRadioButton(); radioButtonGray = new JRadioButton(); radioButtonGreen = new JRadioButton(); radioButtonMagenta = new JRadioButton(); radioButtonOrange = new JRadioButton(); radioButtonPink = new JRadioButton(); radioButtonRed = new JRadioButton(); radioButtonWhite = new JRadioButton(); radioButtonYellow = new JRadioButton(); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); drawingPanel.setBorder(BorderFactory.createEtchedBorder()); drawingPanel.addMouseListener(new MouseAdapter() { public void mouseExited(MouseEvent evt) { drawingPanelMouseExited(evt); } }); drawingPanel.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent evt) { drawingPanelMouseDragged(evt); } public void mouseMoved(MouseEvent evt) { drawingPanelMouseMoved(evt); } }); getContentPane().add(drawingPanel, java.awt.BorderLayout.CENTER); colorPanel.setBorder(BorderFactory.createEtchedBorder()); colorPanel.setLayout(new java.awt.GridLayout(1, 0)); radioButtonBlack.setBackground(Color.BLACK); colorButtonGroup.add(radioButtonBlack); radioButtonBlack.setForeground(Color.WHITE); radioButtonBlack.setSelected(true); radioButtonBlack.setText("Black"); radioButtonBlack.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { color = Color.BLACK; } }); colorPanel.add(radioButtonBlack); radioButtonBlue.setBackground(Color.BLUE); colorButtonGroup.add(radioButtonBlue); radioButtonBlue.setText("Blue"); radioButtonBlue.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { color = Color.BLUE; } }); colorPanel.add(radioButtonBlue); radioButtonCyan.setBackground(Color.CYAN); colorButtonGroup.add(radioButtonCyan); radioButtonCyan.setText("Cyan"); radioButtonCyan.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { color = Color.CYAN; } }); colorPanel.add(radioButtonCyan); radioButtonGray.setBackground(Color.GRAY); colorButtonGroup.add(radioButtonGray); radioButtonGray.setText("Gray"); radioButtonGray.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { color = Color.GRAY; } }); colorPanel.add(radioButtonGray); radioButtonGreen.setBackground(Color.GREEN); colorButtonGroup.add(radioButtonGreen); radioButtonGreen.setText("Green"); radioButtonGreen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { color = Color.GREEN; } }); colorPanel.add(radioButtonGreen); radioButtonMagenta.setBackground(Color.MAGENTA); colorButtonGroup.add(radioButtonMagenta); radioButtonMagenta.setText("Magenta"); radioButtonMagenta.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { color = Color.MAGENTA; } }); colorPanel.add(radioButtonMagenta); radioButtonOrange.setBackground(Color.ORANGE); colorButtonGroup.add(radioButtonOrange); radioButtonOrange.setText("Orange"); radioButtonOrange.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { color = Color.ORANGE; } }); colorPanel.add(radioButtonOrange); radioButtonPink.setBackground(Color.PINK); colorButtonGroup.add(radioButtonPink); radioButtonPink.setText("Pink"); radioButtonPink.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { color = Color.PINK; } }); colorPanel.add(radioButtonPink); radioButtonRed.setBackground(Color.RED); colorButtonGroup.add(radioButtonRed); radioButtonRed.setText("Red"); radioButtonRed.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { color = Color.RED; } }); colorPanel.add(radioButtonRed); radioButtonWhite.setBackground(Color.WHITE); colorButtonGroup.add(radioButtonWhite); radioButtonWhite.setText("White"); radioButtonWhite.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { color = Color.WHITE; } }); colorPanel.add(radioButtonWhite); radioButtonYellow.setBackground(Color.YELLOW); colorButtonGroup.add(radioButtonYellow); radioButtonYellow.setText("Yellow"); radioButtonYellow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { color = Color.YELLOW; } }); colorPanel.add(radioButtonYellow); getContentPane().add(colorPanel, java.awt.BorderLayout.PAGE_START); pack(); } private void drawingPanelMouseMoved(MouseEvent evt) { oldX = evt.getX(); oldY = evt.getY(); setTitle(oldX + "," + oldY + " - Freehand Drawing"); } private void drawingPanelMouseExited(MouseEvent evt) { setTitle("Freehand Drawing"); } private void drawingPanelMouseDragged(MouseEvent evt) { newX = evt.getX(); newY = evt.getY(); graphics = drawingPanel.getGraphics(); graphics.setColor(color); graphics.drawLine(oldX, oldY, newX, newY); oldX = newX; oldY = newY; setTitle(oldX + "," + oldY + " - Freehand Drawing"); } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new FreehandDrawing().setVisible(true); } }); } private ButtonGroup colorButtonGroup; private JPanel colorPanel; private JPanel drawingPanel; private JRadioButton radioButtonBlack; private JRadioButton radioButtonBlue; private JRadioButton radioButtonCyan; private JRadioButton radioButtonGray; private JRadioButton radioButtonGreen; private JRadioButton radioButtonMagenta; private JRadioButton radioButtonOrange; private JRadioButton radioButtonPink; private JRadioButton radioButtonRed; private JRadioButton radioButtonWhite; private JRadioButton radioButtonYellow; private int oldX, oldY, newX, newY; private Color color = Color.BLACK; private Graphics graphics; }