import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class Gui extends JFrame {

    public Gui() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Scene scene = new Scene(300, 300, new Quad(50, 50, 100, 100, Color.ORANGE));
		getContentPane().add(scene, BorderLayout.CENTER);
		pack();
		setLocationRelativeTo(null);
	}
	
	public class Quad extends Rectangle {
		private Color color;
		
		public Quad(int x, int y, int width, int height, Color color) {
			super(x, y, width, height);
			this.color = color;
		}
		
		public Color getColor() {
			return color;
		}
		
	}
	
	public class Scene extends JPanel {
		private Quad quad;
		
		public Scene(int width, int height, Quad quad) {
			super(new BorderLayout());
			setPreferredSize(new Dimension(width, height));
			this.quad = quad;
		}
		
		@Override
		protected void paintComponent(Graphics g) {
			Graphics2D g2 = (Graphics2D)g;
			g2.setPaint(quad.getColor());
			g2.fill(quad);
		}
	}
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			
			@Override
			public void run() {
				new Gui().setVisible(true);
			}
		});
	}
}
