Java tutorial
//package com.ryanm.util.swing; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import javax.swing.JComponent; import javax.swing.JFrame; /** * A simple frame that allows quick and easy visualisation of * something * * @author ryanm */ public class DebugFrame extends JFrame { private DebugPanel panel; /** * Creates a new Debug frame * * @param name * The name for the frame * @param x * The width * @param y * The height */ public DebugFrame(String name, int x, int y) { setTitle("Debug Frame : " + name); panel = new DebugPanel(x, y); getContentPane().add(panel); clear(); pack(); setVisible(true); } /** * Creates a new Debug frame * * @param x * The width * @param y * The height */ public DebugFrame(int x, int y) { setTitle("Debug Frame"); panel = new DebugPanel(x, y); getContentPane().add(panel); clear(); pack(); setVisible(true); } /** * Gets the graphics for the backing image. Stuff drawn on this * context can only be cleared with a call to clear() * * @return A {@link Graphics2D} object */ public Graphics2D getDebugGraphics() { Graphics2D g = panel.buff.createGraphics(); return g; } /** * Gets the graphics for the frame itself. Stuff drawn to this * context will be cleared when refresh() is called * * @return A {@link Graphics2D} object */ public Graphics2D getTempDebugGraphics() { Graphics2D g = (Graphics2D) panel.getGraphics(); return g; } /** * Refreshes the frame by drawing the contents of the back buffer */ public void refresh() { panel.paint(panel.getGraphics()); } /** * Clears the back buffer */ public void clear() { Graphics g = panel.buff.getGraphics(); g.setColor(Color.white); g.fillRect(0, 0, panel.getWidth(), panel.getHeight()); } private class DebugPanel extends JComponent { private int x, y; private BufferedImage buff; private DebugPanel(int x, int y) { this.x = x; this.y = y; buff = new BufferedImage(x, y, BufferedImage.TYPE_INT_ARGB); } @Override public void paint(Graphics g) { g.drawImage(buff, 0, 0, this); } @Override public int getWidth() { return x; } @Override public int getHeight() { return y; } @Override public Dimension getPreferredSize() { return new Dimension(x, y); } } }