package org.teachingextensions.logo.utils.InterfaceUtils; import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; import javax.swing.*; import java.awt.*; import java.util.ArrayList; @Deprecated public class TkpPanel { private LazyPanel panel = new LazyPanel(); public static Graphics2D configureGraphics2D(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE); return g2d; } public TkpPanel add(Component component) { this.panel.getValue().add(component); return this; } public TkpPanel setBackground(Color color) { this.panel.getValue().setBackground(color); return this; } public TkpPanel remove(Paintable item) { this.panel.getValue().remove(item); return this; } public TkpPanel add(Paintable item) { this.panel.getValue().add(item); return this; } public TkpPanel addTo(JFrame frame) { frame.getContentPane().add(this.panel.getValue()); return this; } private class LazyPanel { private PaintablePanel value; public PaintablePanel getValue() { if (this.value == null) { this.value = new PaintablePanel(); } return this.value; } } private class PaintablePanel extends JPanel { public ArrayList<Paintable> interfaceElements = new ArrayList<>(); public PaintablePanel remove(Paintable item) { if (interfaceElements.contains(item)) { interfaceElements.remove(item); } return this; } @Override public void paint(Graphics g) { super.paint(g); Graphics2D g2d = TkpPanel.configureGraphics2D(g); for (Paintable p : interfaceElements) { p.paint(g2d, this); } g2d.dispose(); } protected PaintablePanel add(Paintable item) { if (!interfaceElements.contains(item)) { interfaceElements.add(item); } return this; } } }