实验8 javaFX程序设计(3)

2019-02-15 13:06

6 绘制如下形式的一个二叉树。 程序代码: package tree; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.util.List; import javax.swing.JPanel; @SuppressWarnings(\public class TreePanel extends JPanel { private Node tree; //保存整棵树 private int nodeWidth = 20; //每个结点的宽度 private int nodeHeight = 20; //每个结点的高度 private int vDistance = 50; //每2个结点的垂直距离 private int hDIstance = 30; //每2个结点的水平距离 private int startY = 200; //根结点的Y,默认距离顶部200像素 private int startX = 0; //根结点的X,默认水平居中对齐 private int childAlignWays; //子对齐方式 public static int CHILD_ALIGN_ABSOLUTE = 0; //相对Panel居中 public static int CHILD_ALIGN_RELATIVE = 1; //相对父结点居中 private Font font = new Font(\微软雅黑\ //描述结点的字体 private Color nodeColor = Color.WHITE; //结点背景颜色 private Color linkLineColor = Color.BLACK; //结点连线颜色 private Color stringColor = Color.BLACK; //结点描述文字的颜色 // 默认构造 public TreePanel(){ this(null,CHILD_ALIGN_ABSOLUTE); } //根据传入的Node绘制树,以绝对居中的方式绘制 // @param n 要绘制的树 public TreePanel(Node n){

this(n,CHILD_ALIGN_ABSOLUTE); } /** 1 设置要绘制时候的对齐策略 2 @param childAlignWays 对齐策略 3 @see tree.TreePanel#CHILD_ALIGN_RELATIVE 4 @see tree.TreePanel#CHILD_ALIGN_ABSOLUTE */ public TreePanel(int childAlignWays){ this(null,childAlignWays); } /** 1根据子对齐策略childAlignWays绘制的树的根结点n 2 @param n 要绘制的树的根结点 3 @param childAlignWays 对齐策略 */ public TreePanel(Node n, int childAlignWays){ super(); //setTree(n); this.childAlignWays = childAlignWays; } /** 1 设置用于绘制的树 2 @param n 用于绘制的树的 */ public void setTree(Node n) { tree = n; } //重写,调用自己的绘制方法 public void paintComponent(Graphics g){ startX = (getWidth()-nodeWidth)/2; super.paintComponent(g); g.setFont(font); drawAllNode(tree, startX, g); } /** 1 递归绘制整棵树 2 @param n 被绘制的Node 3 @param xPos 根节点的绘制X位置 4 @param g 绘图上下文环境 */ public String toString() { return \} public void drawAllNode(Node n, int x, Graphics g){ int y = n.getLayer()*(vDistance+nodeHeight)+startY; int fontY = y + nodeHeight - 4; g.setColor(nodeColor); g.fillRect(x, y, nodeWidth, nodeHeight); //画结点的格子

g.setColor(stringColor); g.drawString(n.getName(), x, fontY); //画结点的名字 if(n.hasChild()){ List c = n.getChilds(); int size = n.getChilds().size(); int tempPosx = childAlignWays == CHILD_ALIGN_RELATIVE ? x+nodeWidth/2 - (size*(nodeWidth+hDIstance)-hDIstance)/2 : (getWidth() - size*(nodeWidth+hDIstance)+hDIstance)/2; int i = 0; for(Node node : c){ int newX = tempPosx+(nodeWidth+hDIstance)*i; //孩子结点起始X g.setColor(linkLineColor); g.drawLine(x+nodeWidth/2, y+nodeHeight, newX+nodeWidth/2, y+nodeHeight+vDistance); //画连接结点的线 drawAllNode(node, newX, g); i++; } } } public Color getnodeColor() { return nodeColor; } /** 1 设置结点背景颜色 2 @param nodeColor 结点背景颜色 */ public void setnodeColor(Color nodeColor) { this.nodeColor = nodeColor; } public Color getLinkLineColor() { return linkLineColor; } /** * 设置结点连接线的颜色 * @param nodeLinkLine 结点连接线的颜色 */ public void setLinkLineColor(Color nodeLinkLine) { this.linkLineColor = nodeLinkLine; } public Color getStringColor() { return stringColor; } /** * 设置结点描述的颜色 * @param stringColor 结点描述的颜色 */ public void setStringColor(Color stringColor) {

this.stringColor = stringColor; } public int getStartY() { return startY; } /** * 设置根结点的Y位置 * @param startY 根结点的Y位置 */ public void setStartY(int startY) { this.startY = startY; } public int getStartX() { return startX; } /** * 设置根结点的X位置 * @param startX 根结点的X位置 */ public void setStartX(int startX) { this.startX = startX; } } package tree.demo; import java.awt.BorderLayout; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JPanel; import tree.Node; import tree.TreePanel; public class TestDrawTree extends JFrame{ public TestDrawTree(){ super(\ initComponents(); } public void initComponents(){ //初始化树的数据 Node floor0 = new Node(\ Node floor11 = new Node(\ Node floor12 = new Node(\ floor0.add(floor11); floor0.add(floor12);

Node floor21 = new Node(\ Node floor22 = new Node(\ floor11.add(floor21); floor11.add(floor22); Node floor31 = new Node(\ Node floor32 = new Node(\ floor21.add(floor31); floor21.add(floor32); Node floor41 = new Node(\ Node floor42 = new Node(\ floor32.add(floor41); floor32.add(floor42); floor0.printAllNode(floor0); //输出树 // 创建一个用于绘制树的面板并将树传入,使用相对对齐方式 TreePanel panel1 = new TreePanel(TreePanel.CHILD_ALIGN_RELATIVE); panel1.setTree(floor0); JPanel contentPane = new JPanel(); contentPane.setLayout(new GridLayout(1,1)); contentPane.add(panel1); add(contentPane,BorderLayout.CENTER); } public static void main(String[] args){ TestDrawTree frame = new TestDrawTree(); frame.setSize(800, 800); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }

运行结果贴图:


实验8 javaFX程序设计(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:太重系列电铲参数介绍(WK4-WK75) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: