⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 appdemo.java~41~

📁 源程序(包括最初的版本
💻 JAVA~41~
字号:
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 + -