import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.Rectangle; import java.awt.image.BufferedImage; public class SimplePaint extends JPanel { private boolean painting = false; private int currentX, currentY; public static final int WINDOW_WIDTH = 640; public static final int WINDOW_HEIGHT = 480; public static void main(final String[] args) { JFrame frame = new JFrame("Smile!"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT); frame.setLocationRelativeTo(null); SimplePaint paint = new SimplePaint(); frame.setContentPane(paint); paint.init(); // Important: put this after everything else. frame.setVisible(true); } public SimplePaint() { } public void init() { addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { painting = true; currentX = e.getX(); currentY = e.getY(); repaint(); } public void mouseReleased(MouseEvent e) { painting = false; } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { currentX = e.getX(); currentY = e.getY(); repaint(); } }); } public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; if (painting) { g.setColor(Color.green); g.fillOval(currentX - 4, currentY - 4, 8, 8); String coords = "X: " + currentX + " Y: " + currentY; FontMetrics metrics = g.getFontMetrics(); Rectangle rect = metrics.getStringBounds(coords, g).getBounds(); g.setColor(getBackground()); g.fillRect(10, WINDOW_HEIGHT - 50 - rect.height, rect.width + 20, rect.height); g.setColor(Color.black); g.drawString(coords, 10, WINDOW_HEIGHT - 50); } } }