/* * @(#)MovableChildFiguresSample.java * * Copyright (c) 2009-2010 The authors and contributors of JHotDraw. * You may not use, copy or modify this file, except in compliance with the * accompanying license terms. */ package org.jhotdraw.samples.mini; import org.jhotdraw.draw.tool.DelegationSelectionTool; import org.jhotdraw.draw.handle.ResizeHandleKit; import org.jhotdraw.draw.handle.MoveHandle; import org.jhotdraw.draw.handle.DragHandle; import org.jhotdraw.draw.handle.Handle; import java.awt.BorderLayout; import java.awt.geom.*; import java.util.*; import javax.swing.*; import org.jhotdraw.draw.*; /** * Example showing how to create a graphical composite figure which holds * component figures that can be moved independently using handles. * * @author Werner Randelshofer * @version $Id: EditorSample.java 527 2009-06-07 14:28:19Z rawcoder $ */ public class MovableChildFiguresSample { private static class LabeledEllipseFigure extends GraphicalCompositeFigure { private static final long serialVersionUID = 1L; public LabeledEllipseFigure() { setPresentationFigure(new EllipseFigure()); LabelFigure label = new LabelFigure("Label"); label.transform(new AffineTransform(0, 0, 0, 0, 25, 37)); add(label); } /** * Return default handles from the presentation figure. */ @Override public Collection<Handle> createHandles(int detailLevel) { LinkedList<Handle> handles = new LinkedList<Handle>(); switch (detailLevel) { case 0: MoveHandle.addMoveHandles(this, handles); for (Figure child : getChildren()) { MoveHandle.addMoveHandles(child, handles); handles.add(new DragHandle(child)); } break; case 1: ResizeHandleKit.addResizeHandles(this, handles); break; default: break; } return handles; } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { // Create a simple drawing consisting of three // text areas and an elbow connection. LabeledEllipseFigure ta = new LabeledEllipseFigure(); ta.setBounds(new Point2D.Double(10, 10), new Point2D.Double(100, 100)); LabeledEllipseFigure tb = new LabeledEllipseFigure(); tb.setBounds(new Point2D.Double(220, 120), new Point2D.Double(310, 210)); LabeledEllipseFigure tc = new LabeledEllipseFigure(); tc.setBounds(new Point2D.Double(220, 10), new Point2D.Double(310, 100)); Drawing drawing = new DefaultDrawing(); drawing.add(ta); drawing.add(tb); drawing.add(tc); // Create a frame with a drawing view and a drawing editor JFrame f = new JFrame("My Drawing"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(400, 300); DrawingView view = new DefaultDrawingView(); view.setDrawing(drawing); f.add(view.getComponent()); f.add(new JLabel("Press space bar to toggle handles."), BorderLayout.SOUTH); DrawingEditor editor = new DefaultDrawingEditor(); editor.add(view); editor.setTool(new DelegationSelectionTool()); f.setVisible(true); } }); } }