/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package mvcgrafik.view; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.util.logging.Logger; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.standard.DialogTypeSelection; import javax.swing.JComponent; import javax.swing.JOptionPane; import mvcgrafik.model.GrafikModel; import ohmlogger.OhmLogger; /** * * @author hd, chris */ public class GrafikView extends JComponent implements Printable { private final static Dimension EINS = new Dimension(1, 1); private static Logger lg = OhmLogger.getLogger(); private Rectangle2D.Float pixel; private GrafikModel model; private Point old_punkt = null; public GrafikView() { pixel = new Rectangle2D.Float(); this.setBackground(Color.WHITE); } public void setModel(GrafikModel model) { this.model = model; } public void drawLine(Point p, Point p_old) { Graphics2D g2 = (Graphics2D) this.getGraphics(); Line2D.Double line = new Line2D.Double(p.getX(),p.getY(),p_old.getX(),p_old.getY()); g2.draw(line); g2.dispose(); // VERY, VERY WICHTIG } public void drawLineG2(Point p, Point p_old, Graphics2D g2) { Line2D.Double line = new Line2D.Double(p.getX(),p.getY(),p_old.getX(),p_old.getY()); g2.draw(line); } @Override public void paintComponent(Graphics g) { lg.info("repaint"); if (model == null) { lg.severe("keine Referenz auf Model vorhanden"); return; } super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; model.getFigures().forEach(figure -> { old_punkt = null; figure.getPunkte().forEach(punkt -> { if(old_punkt != null) { drawLineG2(punkt, old_punkt, g2); } old_punkt = punkt; }); }); } public void doPrint() { HashPrintRequestAttributeSet printSet = new HashPrintRequestAttributeSet(); printSet.add(DialogTypeSelection.NATIVE); PrinterJob pj = PrinterJob.getPrinterJob(); pj.setPrintable(this); // Druckdialog if (pj.printDialog(printSet)) { try { pj.print(printSet); } catch (Exception ex) { JOptionPane.showMessageDialog(this, ex.toString()); } } } @Override public int print(Graphics gp, PageFormat pf, int pageIndex) throws PrinterException { Graphics2D g2p = (Graphics2D) gp; if (pageIndex == 1) { g2p.translate(pf.getImageableX(), pf.getImageableY()); g2p.scale(pf.getImageableWidth()/this.getWidth(), pf.getImageableHeight() / this.getHeight()); super.print(g2p); return Printable.PAGE_EXISTS; } else { return Printable.NO_SUCH_PAGE; } } }