You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GrafikView.java 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package mvcgrafik.view;
  7. import java.awt.Color;
  8. import java.awt.Dimension;
  9. import java.awt.Graphics;
  10. import java.awt.Graphics2D;
  11. import java.awt.Point;
  12. import java.awt.geom.Rectangle2D;
  13. import java.awt.print.PageFormat;
  14. import java.awt.print.Printable;
  15. import java.awt.print.PrinterException;
  16. import java.awt.print.PrinterJob;
  17. import java.util.logging.Logger;
  18. import javax.print.attribute.HashPrintRequestAttributeSet;
  19. import javax.print.attribute.standard.DialogTypeSelection;
  20. import javax.swing.JComponent;
  21. import javax.swing.JOptionPane;
  22. import mvcgrafik.model.GrafikModel;
  23. /**
  24. *
  25. * @author le
  26. */
  27. public class GrafikView extends JComponent implements Printable
  28. {
  29. private final static Dimension EINS = new Dimension(1, 1);
  30. private final static Logger lg = Logger.getLogger("mvcGrafik");
  31. private Rectangle2D.Float pixel;
  32. private GrafikModel model;
  33. public GrafikView()
  34. {
  35. pixel = new Rectangle2D.Float();
  36. this.setBackground(Color.WHITE);
  37. }
  38. public void setModel(GrafikModel model)
  39. {
  40. this.model = model;
  41. }
  42. public void drawPoint(Point p)
  43. {
  44. Graphics2D g2 = (Graphics2D) this.getGraphics();
  45. pixel.setFrame(p, EINS);
  46. g2.draw(pixel);
  47. g2.dispose(); // VERY, VERY WICHTIG
  48. }
  49. @Override
  50. public void paintComponent(Graphics g)
  51. {
  52. if (model == null)
  53. {
  54. lg.severe("keine Referenz auf Model vorhanden");
  55. return;
  56. }
  57. super.paintComponent(g);
  58. Graphics2D g2 = (Graphics2D) g;
  59. for (Point p : model.getPunkte())
  60. {
  61. pixel.setFrame(p, EINS);
  62. g2.draw(pixel);
  63. }
  64. }
  65. public void doPrint()
  66. {
  67. HashPrintRequestAttributeSet printSet =
  68. new HashPrintRequestAttributeSet();
  69. printSet.add(DialogTypeSelection.NATIVE);
  70. PrinterJob pj = PrinterJob.getPrinterJob();
  71. pj.setPrintable(this);
  72. // Druckdialog
  73. if (pj.printDialog(printSet))
  74. {
  75. try
  76. {
  77. pj.print(printSet);
  78. }
  79. catch (Exception ex)
  80. {
  81. JOptionPane.showMessageDialog(this, ex.toString());
  82. }
  83. }
  84. }
  85. @Override
  86. public int print(Graphics gp, PageFormat pf, int pageIndex) throws PrinterException
  87. {
  88. Graphics2D g2p = (Graphics2D) gp;
  89. if (pageIndex == 1)
  90. {
  91. g2p.translate(pf.getImageableX(), pf.getImageableY());
  92. g2p.scale(pf.getImageableWidth()/pf.getWidth(),
  93. pf.getImageableHeight() / pf.getHeight());
  94. super.print(g2p);
  95. return Printable.PAGE_EXISTS;
  96. }
  97. else
  98. {
  99. return Printable.NO_SUCH_PAGE;
  100. }
  101. }
  102. }