Und wenn nicht?
An sich ist die Frage schon berechtigt, aber vieeel zu breit. Also, “Punkte und Linien”… das sagt nicht so viel aus. Man könnte zwar pragmatisch sowas machen wie
protected void paintComponent(Graphics gr) {
super.paintComponent(gr);
Graphics2D g = (Graphics2D)gr;
// Scale and translate the graphics somehow so that the
// current input points are visible. Change and re-compile
// this class when the inputs change....
g.scale(0.00001, 0.00001);
g.translate(100000, 100000);
g.drawWhatever( 52123546.1236548, 52123547.2566548 );
...
}
aber das ist ja bogus.
Auch wenn die Frage zu ungenau ist, als dass eine konkrete Antwort gerechtfertigt wäre, nutze ich mal die Gelegenheit zur “shameless self promotion”, und erwähne, dass es doch praktisch sein könnte, wenn man in dem Panel dann mit der Maus auch zoomen und pannen kann, und dass das mit https://github.com/javagl/Viewer (Maven: https://oss.sonatype.org/content/repositories/releases/de/javagl/viewer/0.0.2/ ) recht einfach geht.
Hier werden zwei Punkte gezeichnet:
points.add(new Point2D.Double(52123546.1236548, 52123547.2566548));
points.add(new Point2D.Double(52123946.1236548, 52123347.2566548));
Der dargestellte Welt-Bereich ist passend gesetzt:
viewer.setDisplayedWorldArea(
new Rectangle(52120000, 52120000, 10000, 10000));
Hm. Aber man kann’s auch anders machen.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import de.javagl.viewer.Painter;
import de.javagl.viewer.Viewer;
public class PointsOnPanel
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}
private static void createAndShowGUI()
{
JFrame f = new JFrame("Viewer");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().setLayout(new BorderLayout());
Viewer viewer = new Viewer();
viewer.addPainter(new PointPainter());
f.getContentPane().add(viewer, BorderLayout.CENTER);
viewer.addMouseMotionListener(new MouseAdapter()
{
@Override
public void mouseMoved(MouseEvent e)
{
Point2D world = new Point2D.Double();
viewer.getScreenToWorld().transform(e.getPoint(), world);
System.out.println("World position: "+world);
}
});
viewer.setDisplayedWorldArea(
new Rectangle(52120000, 52120000, 10000, 10000));
viewer.setPreferredSize(new Dimension(500,500));
f.pack();
viewer.setPreferredSize(null);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private static class PointPainter implements Painter
{
private final List<Point2D> points;
PointPainter()
{
points = new ArrayList<Point2D>();
points.add(new Point2D.Double(52123546.1236548, 52123547.2566548));
points.add(new Point2D.Double(52123946.1236548, 52123347.2566548));
}
@Override
public void paint(Graphics2D g,
AffineTransform worldToScreen, double w, double h)
{
g.setColor(Color.RED);
for (Point2D point : points)
{
Point2D transformedPoint =
worldToScreen.transform(point, null);
paintPoint(g, transformedPoint);
}
}
private static void paintPoint(Graphics2D g, Point2D point)
{
final double r = 5;
Shape s = new Ellipse2D.Double(
point.getX() - r, point.getY() - r, r + r, r + r);
g.fill(s);
}
}
}