📄 appdemo.java~44~
字号:
package App;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 2.0(2005.7.5)加入图形界面
* @version 2.1(2005.7.5)初步加入动画和线程,产生节点的遍历动画效果
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.border.*;
public class AppDemo
extends JFrame
implements ActionListener, ChangeListener {
//绘图组件
private JButton preTravel = new JButton("先根遍历"); //先根按钮
private JButton poseTravel = new JButton("后根遍历"); //后根按钮
private JTextField text = new JTextField(40); //文本输入
private JSlider slider_FPS = new JSlider(JSlider.HORIZONTAL, 1, 30, 20); //滑块
private JRadioButton handInput = new JRadioButton("手动输入");
private JRadioButton fieldInput = new JRadioButton("导入文件");
private JPanel control = new JPanel(); //控制选择区
private JPanel inPut = new JPanel(); //输入区
private JPanel controlAndinput = new JPanel();
//private Container workPad;
private DrawPanel drawPanel; //=new DrawPanel(); //绘图板
//数据对象
private Table table; //表格数据,记录了节点的坐标等信息
private Tree tree; //树
private Thread treeAppDemo; //基本运行线程
public AppDemo() {
//初始化
table = new Table();
tree = new Tree();
drawPanel = new DrawPanel();
//框架
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(680, 580);
//preTravel.setSize(600,400);
this.setVisible(true);
//Tips
preTravel.setToolTipText("演示树的先根遍历");
poseTravel.setToolTipText("演示树的后根遍历");
slider_FPS.setToolTipText("控制演示速度");
//控制按钮
control.setLayout(new FlowLayout());
control.add(preTravel);
control.add(poseTravel);
control.add(slider_FPS);
//输入按钮
inPut.setLayout(new FlowLayout());
inPut.add(handInput);
inPut.add(fieldInput);
inPut.add(text);
controlAndinput.setLayout(new GridLayout(2, 1));
controlAndinput.add(inPut);
controlAndinput.add(control);
Container workPad = this.getContentPane();
workPad.setLayout(new BorderLayout(5, 5));
workPad.add(controlAndinput, BorderLayout.NORTH);
//workPad.add(text,BorderLayout.NORTH);
//workPad.add(function,BorderLayout.NORTH);
//workPad.add(control,BorderLayout.CENTER);
workPad.add(drawPanel, BorderLayout.CENTER);
//workPad.add(shunXu,BorderLayout.SOUTH);
//this.pack();
//监听
preTravel.addActionListener(this);
poseTravel.addActionListener(this);
text.addActionListener(this);
slider_FPS.addChangeListener(this);
}
//事件处理
public void actionPerformed(ActionEvent e) {
if (e.getSource() == text) {//t文本框输入事件发生
String s = new String();
s = text.getText();//取得文本数据
//tree.creatTreeTable(s);//建造树
table = tree.table;//表的赋值
drawPanel.setTable(table);//drawPanel中的表成员的赋值
//s=new String("text");
drawPanel.setFunction(new String("text"));//传入按钮字符串给drawPanel
drawPanel.repaint();//重画
//drawPanel=new DrawPanel(table);
//workPad.add(drawPanel,BorderLayout.CENTER);
}
if (e.getSource() == preTravel) {//先根preTravel按钮按下
//if (treeAppDemo == null) {
Runnable travel = new Runnable() {//建立一个Ruannable的对象,为线程做准备,Ruannable是接口
public void run() {//实现Ruannable 的run()方法
//long FPS=1000;
try {//注意,要用try,catch语句!
tree.preOrder();//树的先根遍历
table = tree.table;
drawPanel.setFunction(new String("preTravel"));
//用table的路径记录数组path来进行树遍历的图像绘画(遍历过程中当前节点的标记)
for (int i = 0; i < table.number; i++) {
drawPanel.setCurrent(table.path[i]);
drawPanel.repaint();//重画
Thread.sleep(1000);//线程休眠
}
}
catch (InterruptedException ex) {
return;
}
}
//drawPanel.repaint();
};
treeAppDemo=new Thread(travel);//建立一个新线程 Thread t=new Thread(实现了Runnable接口的对象)
treeAppDemo.start();//启动线程
}
//}
if (e.getSource() == poseTravel) {
Runnable travel = new Runnable() {
public void run() {
//long FPS=1000;
try {
tree.postOrder();
table = tree.table;
drawPanel.setFunction(new String("postTravel"));
for (int i = 0; i < table.number; i++) {
drawPanel.setCurrent(table.path[i]);
drawPanel.repaint();
Thread.sleep(1000);
}
}
catch (InterruptedException ex) {
return;
}
}
//drawPanel.repaint();
};
treeAppDemo=new Thread(travel);
treeAppDemo.start();
}
}
public void stateChanged(ChangeEvent e) {
}
public static void main(String args[]) {
AppDemo draw = new AppDemo();
draw.show();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -