JAVA画树

JAVA用Jtree动态画二叉树~

给你代码。--------------------------------------------------------------------------------------------import java.util.Hashtable;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTree;import javax.swing.UIManager;import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;public class App extends JFrame {public App() {try {// Windows风格UIManager.setLookAndFeel(new WindowsLookAndFeel());} catch (Exception e) {System.out.println(e.getMessage());}setDefaultCloseOperation(EXIT_ON_CLOSE);setSize(383, 412);setLocationRelativeTo(null);getContentPane().setLayout(null);JScrollPane scrollPane = new JScrollPane();scrollPane.setBounds(12, 10, 351, 317);getContentPane().add(scrollPane);String[] s1 = { "张一", "张二" };String[] s2 = { "王二", "李四" };Hashtable hashtable1 = new Hashtable();hashtable1.put("家人", s1);hashtable1.put("朋友", s2);JTree tree = new JTree(hashtable1);scrollPane.setViewportView(tree);JButton btnNewButton = new JButton("刷新");btnNewButton.setBounds(12, 352, 93, 23);getContentPane().add(btnNewButton);JButton btnNewButton_1 = new JButton("退出");btnNewButton_1.setBounds(270, 352, 93, 23);getContentPane().add(btnNewButton_1);setVisible(true);}public static void main(String[] args) {new App();}}

先用集合构建逻辑二叉树再用Swing画出来

画什么都行,这个你得自己实现。我可以给你写一个画树的小程序:

---------------------------------------------------------
//TreeNode.java

package util;

import java.util.Vector;

public class TreeNode {
private Vector<TreeNode> children;
private TreeNode parent;
private TreeNode root;

public TreeNode (TreeNode parent) {
children = new Vector<TreeNode>();
if (parent == null)
root = this;
else {
parent.addChild(this);
}
}

public void addChild (TreeNode n) {
addChild(children.size(), n);
}

public void addChild (int index, TreeNode n) {
children.add(index, n);
n.parent = this;
}

public void removeChild (TreeNode n) {
children.remove(n);
}

public void removeChild (int index) {
children.remove(index);
}

public void setChild (int index, TreeNode n) {
children.set(index, n);
n.parent = this;
}

public TreeNode getChild (int index) {
return children.get(index);
}

public void changePosition (int index1, int index2) {
if (0 <= index1 && index1 < children.size() &&
0 <= index2 && index2 <= children.size()) {
TreeNode tmp = children.get(index1);
children.set(index1, children.get(index2));
children.set(index2, tmp);
}
}

public void setParent (TreeNode n) {
parent = n;
}

public TreeNode getRoot () {
return root;
}

public TreeNode getParent () {
return parent;
}

public Vector<TreeNode> getChildren () {
return children;
}
}

------------------------------------------------------------
//TreePanelNode.java

package ui;

import util.TreeNode;
import java.awt.*;

public class TreePanelNode extends TreeNode {
private int x, y, width, height;
private Object value;
private TreePanelNode parent;

public TreePanelNode (TreePanelNode parent, int x, int y, int width, int height, Object value) {
super(parent);
this.x = x;
this.y = y;
this.parent = parent;
this.width = width;
this.height = height;
this.value = value;
}

public void setLocation (int x, int y) {
this.x = x;
this.y = y;
}

public void setSize (int width, int height) {
this.width = width;
this.height = height;
}

public Rectangle getBounds () {
return new Rectangle(x, y, width, height);
}

public Object getValue () {
return value;
}

public Point getLocation () {
return new Point(x, y);
}

public int getWidth () {
return width;
}

public int getHeight () {
return height;
}

public void setValue (Object value) {
this.value = value;
}

public TreePanelNode getParent () {
return parent;
}
}

--------------------------------------------------------------
//TreePanel.java

package ui;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

public class TreePanel extends JPanel {
private Vector<TreePanelNode> nodes;
private Vector<Integer> selectedNodes;

private int tmpX, tmpY;
private int editingNode = -1;
private int addingParent = -2;
private int mouseX, mouseY;

public TreePanel () {
nodes = new Vector<TreePanelNode>();
selectedNodes = new Vector<Integer>();

setBackground(Color.WHITE);
addMouseListener(new MouseAdapter() {
public void mousePressed (MouseEvent me) {
tmpX = me.getX();
tmpY = me.getY();
if (nodes.size() == 0) {
addingParent = -1;
}
int i = 0;
for (; i<nodes.size(); i++) {
if (nodes.get(i).getBounds().contains(mouseX, mouseY)) {
if (me.isControlDown()) {
if (!selectedNodes.contains(i))
selectedNodes.add(i);
else
selectedNodes.removeElement(i);
} else if (!selectedNodes.contains(i)) {
selectedNodes = new Vector<Integer>();
selectedNodes.add(i);
}
if (me.getClickCount() == 2) {
nodes.get(i).setValue("");
editingNode = i;
}
break;
}
}
if (i == nodes.size())
if (!me.isControlDown())
selectedNodes = new Vector<Integer>();
repaint();
}

public void mouseReleased (MouseEvent me) {
addingParent = -2;
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged (MouseEvent me) {
mouseX = me.getX();
mouseY = me.getY();
int i = 0;
for (; i<selectedNodes.size(); i++) {
if (nodes.get(selectedNodes.get(i)).getBounds().contains(mouseX, mouseY))
break;
}
if (i != selectedNodes.size()) {
if (me.isAltDown() && addingParent != -3) {
addingParent = selectedNodes.get(i);
} else {
for (i=0; i<selectedNodes.size(); i++) {
nodes.get(selectedNodes.get(i)).setLocation(nodes.get(selectedNodes.get(i)).getLocation().x + mouseX - tmpX,
nodes.get(selectedNodes.get(i)).getLocation().y + mouseY - tmpY);
}
tmpX = mouseX;
tmpY = mouseY;
}
}
repaint();
}

public void mouseMoved (MouseEvent me) {
mouseX = me.getX();
mouseY = me.getY();
}
});
addKeyListener(new KeyAdapter() {
public void keyTyped (KeyEvent ke) {
if (editingNode != -1) {
if (ke.getKeyCode() == KeyEvent.VK_ENTER)
editingNode = -1;
else
nodes.get(editingNode).setValue(nodes.get(editingNode).getValue().toString()+ke.getKeyChar());
repaint();
}
}
});
}

public void paint (Graphics g) {
super.paint(g);
FontMetrics fm = g.getFontMetrics();
if (addingParent > -2) {
String str = "node" + nodes.size();
int width = fm.stringWidth(str);
int height = fm.getHeight();

TreePanelNode pnt = null;
if (addingParent != -1)
pnt = nodes.get(addingParent);

nodes.add(new TreePanelNode(pnt, mouseX-width/2-10, mouseY-height/2-20, width+20, height+40, str));
addingParent = -3;
selectedNodes = new Vector<Integer>();
selectedNodes.add(nodes.size()-1);
}
for (int i=0; i<nodes.size(); i++) {
String str = nodes.get(i).getValue().toString();
int width = fm.stringWidth(str);
int height = fm.getHeight();
nodes.get(i).setSize(width + 20, height + 40);

if (selectedNodes.contains(i))
g.setColor(Color.RED);
else
g.setColor(Color.BLACK);

if (nodes.get(i).getParent() != null)
g.drawLine(nodes.get(i).getLocation().x+nodes.get(i).getWidth()/2,
nodes.get(i).getLocation().y+nodes.get(i).getHeight()/2,
nodes.get(i).getParent().getLocation().x+nodes.get(i).getParent().getWidth()/2,
nodes.get(i).getParent().getLocation().y+nodes.get(i).getParent().getHeight()/2);

g.drawString(str, nodes.get(i).getLocation().x + 10, nodes.get(i).getLocation().y + 20);
g.drawRect(nodes.get(i).getLocation().x, nodes.get(i).getLocation().y, nodes.get(i).getWidth(), nodes.get(i).getHeight());
}
grabFocus();
}
}

----------------------------------------------------------
//MainView.java

package ui;

import javax.swing.*;

public class MainView extends JFrame {
private TreePanel tp;

public MainView () {
super("TreeDemo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setLocationRelativeTo(null);

tp = new TreePanel();
add(tp);
setVisible(true);
}

public static void main (String args[]) {
new MainView();
}
}

------------------------------------------------------------
好了。然后你新建一个 util 文件夹 和 一个 ui 文件夹,把第一个文件放在 util 文件夹下,把其余文件放在 ui 文件夹下,文件名都根据我的注释就行了。
例如你这两个文件夹新建在 D 盘下,在命令行中编译运行:

----------------------------------------------------------
...>D:

D:\>javac util\TreeNode.java ui\TreePanelNode.java ui\TreePanel.java ui\MainView.java

D:\>java ui.MainView

----------------------------------------------------------
于是便能看到效果。祝您好运,顺便我写了这么多就给个最佳答案吧,哈哈。
忘了告诉你,按住 Alt 键拖动 Node 可以添加子节点。
按住 Ctrl 键单击 node 可以多选。
双击一个 node 然后可以从键盘输入 新的字符串,按回车结束。

----------------------------------------------------------
如果对以上的程序还有什么问题,留下邮箱,我直接发给你。

dojo 去研究一下

当然可以,只是我不会画而已.......

JAVA画树
答:for(int i = 0; i < childCount; i++){ //TreeParameter是树的半径,Math下面的Tan和cot函数有点记不清了 //每个孩子占一个角度单位 int distanceX = java.Math.Tan(java.Math.PI/(childCount + 1)) * TreeParameter * i int distanceY = ConstantY //Y是个常量 //每个孩子占...

JAVA画树
答://TreePanel.javapackage ui;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.Vector;public class TreePanel extends JPanel { private Vector<TreePanelNode> nodes; private Vector<Integer> selectedNodes; private int tmpX, tmpY; private int editingNode = -1; priva...

编程初学者,想用JAVA做一个二叉树界面,求指点。
答:你可以先new一个JPanel上面使用GridLayout(7,15)布局管理器,依次add组件。空白位置add(new JPanel()),需要文本框覆盖的位置add文本框或者文本域组件。然后预览后发现这些文本框按照你的想法都排列在哪里。这时候再截图(仅这个java窗口),然后把截图放到ps里面,然后设置预览比例为100%。进行1:1比例...

用java打印松树
答:import java.lang.Math;public class printPine{ public static void main(String args[]){ int n,b,i,j; n = 6; //树叶部分层数 b = 2; //树干部分层数 int h=n*2-1; int l=h*2; //绘制树叶部分 for(i=0;i<n;++i) { for(j=0;j<l;++j)...

如何用Java实现树形结构啊?
答:package tree;import java.util.LinkedList;import java.util.List;/ 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 参考资料0:数据结构(C语言版)严蔚敏 参考资料1:http://zhidao.baidu.com/question/81938912.html 参考资料2:http://cslibrary.stanford.edu/110/BinaryTrees.html#java...

怎么利用JAVA画圆,线,并且在线上输入数字和圆内输入数字(画数据结构中...
答:public abstract void drawOval(int x,int y,int width,int height)绘制椭圆的边框。得到的是一个圆或椭圆,它恰好适合放在由 x、y、width 和 height 参数指定的矩形内。椭圆覆盖区域的宽度为 width + 1 像素,高度为 height + 1 像素。参数:x - 要绘制椭圆的左上角的 x 坐标。y - 要绘制...

java二叉树节点不显示
答:java二叉树节点不显示 二叉树(Java实现) - 大数据阿嘉的博客 - CSDN博客 - java 二叉树 1. 创建一颗二叉树 2. 前序遍历 2.1先输出当前节点(初始的时候是root节点) 2.2如果左子节点不为空,则递归继续前序遍历 2.3如果右子节点不为空,则递归继续前序 

java 树是什么意思
答:在Java中,树有很多种类型,例如二叉树、平衡树和堆等等。其中,二叉树是最常见的一种树形结构,它是一种有序树,每个节点最多有两个子节点,并且它的子节点被称为左子树和右子树。还有红黑树,它是一种自平衡二叉查找树,可以在插入和删除节点的时候自动调整,保持树的平衡性。在Java的标准库中,...

Java 树形问题 很简单 在线等随时给分
答:import java.awt.*;import java.awt.event.*;public class 处理树选取事件 extends JApplet { JTree tree = new JTree();JTextArea textArea = new JTextArea();JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,new JScrollPane(tree),new JScrollPane(textArea));public void init(...

java二叉树家谱实现
答:button.setText("随机生成树");panel.add(button);pack();} protected JTree getTree(int n) { String[] second=null;String[][] three=null;if(n==0){second=school; three=school2;} if(n==1){second=color; three=color2;} if(n==2){second=plant; three=plant2;} DefaultMutable...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网