addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
+ if(transform == null)
+ return;
Point cur = e.getPoint();
if (prev == null)
prev = cur;
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
- if(transform != null) {
- double scale = Math.exp(-0.1*e.getUnitsToScroll());
- Point p = e.getPoint();
- AffineTransform mod = new AffineTransform();
- mod.translate(p.getX(), p.getY());
- mod.scale(scale, scale);
- mod.translate(-p.getX(), -p.getY());
- transform.preConcatenate(mod);
- repaint();
- }
+ if(transform == null)
+ return;
+ double scale = Math.exp(-0.1*e.getUnitsToScroll());
+ Point p = e.getPoint();
+ AffineTransform mod = new AffineTransform();
+ mod.translate(p.getX(), p.getY());
+ mod.scale(scale, scale);
+ mod.translate(-p.getX(), -p.getY());
+ transform.preConcatenate(mod);
+ repaint();
}
});
private void fit() {
Rectangle2D bounds = drawable.getBounds();
-
Rectangle2D container = getBounds();
+
+ if(bounds == null || container == null)
+ return;
+
double scale = container == null ? 1 : Math.min(
container.getWidth() / bounds.getWidth(),
container.getHeight() / bounds.getHeight());
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
- if(transform == null)
+ if(transform == null) {
fit();
+ if(transform == null) {
+ g.setTransform(new AffineTransform());
+ g.setColor(Color.BLACK);
+ g.drawString("No data available yet", 20f, 20f);
+ return;
+ }
+ }
g.setTransform(transform);
drawable.draw(g, null);