package org.geotoolkit.pending.demo.rendering.customdecoration; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.geotoolkit.display2d.canvas.RenderingContext2D; import org.geotoolkit.gui.swing.render2d.decoration.AbstractMapDecoration; import org.opengis.geometry.BoundingBox; public class CellDecoration extends AbstractMapDecoration{ private double cellSize = 50; private final JPanel panel = new JPanel(){ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); final Graphics2D g2d = (Graphics2D) g; //we want to render as if we where on the canvas final RenderingContext2D context = new RenderingContext2D(map.getCanvas()); map.getCanvas().prepareContext(context, g2d, g.getClip()); final BoundingBox bbox = context.getCanvasObjectiveBounds2D(); final double minx = bbox.getMinX(); final double maxx = bbox.getMaxX(); final double miny = bbox.getMinY(); final double maxy = bbox.getMaxY(); context.switchToObjectiveCRS(); final java.awt.geom.Line2D.Double line = new java.awt.geom.Line2D.Double(); g.setColor(Color.BLACK); for(double i=minx; i<maxx ;i+=cellSize){ line.setLine(i, miny, i, maxy); g2d.draw(line); } for(double i=miny; i<maxy ;i+=cellSize){ line.setLine(minx, i, maxx, i); g2d.draw(line); } context.switchToDisplayCRS(); } }; public CellDecoration(){ final JLabel lbl = new JLabel("Cell width "); lbl.setOpaque(true); final JSpinner spinner = new JSpinner(new SpinnerNumberModel(50, 1, 5000, 10)); spinner.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { cellSize = ((Number)spinner.getValue()).floatValue(); panel.repaint(); } }); panel.add(lbl); panel.add(spinner); panel.setOpaque(false); } @Override public void refresh() { cellSize = 50; panel.repaint(); } @Override public JComponent getComponent() { return panel; } }