package examples; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; /** * A painted copy of a component. * @author kjg * */ public class PaintedBuffer extends JPanel { BufferedImage buffer; public PaintedBuffer(Component original) { buffer = new BufferedImage(original.getWidth(), original.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D bufferedGraphics = (Graphics2D) buffer.getGraphics(); bufferedGraphics.setColor(Color.WHITE); bufferedGraphics.fillRect(0,0,original.getWidth(), original.getHeight()); original.paint(bufferedGraphics); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.scale(((double) getWidth()/buffer.getWidth()), ((double) getHeight())/buffer.getHeight()); g2.drawImage(buffer, 0, 0, null); } // Test program: public static void main(String[] args) { JFrame f = new JFrame("My GUI"); JButton button = new JButton("CSE132 Rocks!"); button.setIcon(new ImageIcon("smile.jpg")); button.setBounds(10,10,200,100); f.setLayout(null); f.add(button); PaintedBuffer image = new PaintedBuffer(button); image.setBounds(220,10,200,100); f.add(image); PaintedBuffer image2 = new PaintedBuffer(button); image2.setBounds(10,200,100,50); f.add(image2); f.setSize(500,300); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }