/* * @(#)DrawingTree.java 2.1 2003/10/07 * * Copyright (C) 1999, 2003 D.A. Watt and D.F. Brown * Dept. of Computing Science, University of Glasgow, Glasgow G12 8QQ Scotland * and School of Computer and Math Sciences, The Robert Gordon University, * St. Andrew Street, Aberdeen AB25 1HG, Scotland. * All rights reserved. * * This software is provided free for educational use only. It may * not be used for commercial purposes without the prior written permission * of the authors. */ package Triangle.TreeDrawer; import java.awt.Color; import java.awt.Graphics; import java.awt.Point; public class DrawingTree { String caption; int width, height; Point pos, offset; Triangle.TreeDrawer.Polygon contour; DrawingTree parent; DrawingTree[] children; public DrawingTree (String caption, int width, int height) { this.caption = caption; this.width = width; this.height = height; this.parent = null; this.children = null; this.pos = new Point(0, 0); this.offset = new Point(0, 0); this.contour = new Triangle.TreeDrawer.Polygon(); } public void setChildren(DrawingTree[] children) { this.children = children; for (int i = 0; i < children.length; i++) children[i].parent = this; } private final int FIXED_FONT_HEIGHT = 10; private final int FIXED_FONT_ASCENT = 3; private final Color nodeColor = new Color(250, 220, 100); public void paint (Graphics graphics) { graphics.setColor(nodeColor); graphics.fillRect(pos.x, pos.y, width, height); graphics.setColor(Color.black); graphics.drawRect(pos.x, pos.y, width - 1, height - 1); graphics.drawString(caption, pos.x + 2, pos.y + (height + FIXED_FONT_HEIGHT) / 2); if (children != null) { for (int i = 0; i < children.length; i++) { children[i].paint(graphics); } } if (parent != null) { graphics.drawLine(pos.x + width / 2, pos.y, parent.pos.x + parent.width / 2, parent.pos.y + parent.height); } } public void position (Point pos) { this.pos.x = pos.x + this.offset.x; this.pos.y = pos.y + this.offset.y; Point temp = new Point(this.pos.x, this.pos.y); if (children != null) { for (int i = 0; i < children.length; i++) { children[i].position(temp); temp.x += children[i].offset.x; temp.y = this.pos.y + children[0].offset.y; } } } }