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

📄 frame1.java~144~

📁 源程序(包括最初的版本
💻 JAVA~144~
📖 第 1 页 / 共 2 页
字号:
package treeandbtreedemo;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;//swing组件事件响应ChangeListener
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 * @version 3.1图形界面的设计
 * @version 3.2动画效果
 */

public class Frame1
    extends JFrame
    implements Runnable {
  JPanel contentPane;
  JMenuBar jMenuBar1 = new JMenuBar();
  JMenu jMenuFile = new JMenu();
  JMenuItem jMenuFileExit = new JMenuItem();
  JMenu jMenuHelp = new JMenu();
  JMenuItem jMenuHelpAbout = new JMenuItem();
  JLabel statusBar = new JLabel();
  BorderLayout borderLayout1 = new BorderLayout();
  JButton stop = new JButton();
  FlowLayout flowLayout5 = new FlowLayout();
  JPanel jPanel4 = new JPanel();
  JSlider slider = new JSlider();

  DrawPanel drawTable = new DrawPanel();
  //JPanel  draw = new JPanel();

  FlowLayout flowLayout2 = new FlowLayout();
  JButton binaryTreeInOrder = new JButton();
  JButton auto = new JButton();
  JButton binaryTreePostOrder = new JButton();
  BorderLayout borderLayout4 = new BorderLayout();
  JPanel panel = new JPanel();
  JButton openFile = new JButton();
  JPanel jPanel2 = new JPanel();
  JPanel jPanel12 = new JPanel();
  FlowLayout flowLayout1 = new FlowLayout();
  JButton reset = new JButton();
  JPanel input = new JPanel();
  JPanel jPanel6 = new JPanel();
  JButton binaryTreePreOrder = new JButton();
  JPanel jPanel14 = new JPanel();
  JTextField text = new JTextField();
  JButton treePreOrder = new JButton();
  JButton treePostOrder = new JButton();
  ButtonGroup buttonGroup1 = new ButtonGroup();
  JRadioButton jRadioButtonBT = new JRadioButton();
  JRadioButton jRadioButtonTree = new JRadioButton();
  FlowLayout flowLayout3 = new FlowLayout();
  GridLayout gridLayout1 = new GridLayout();
  FlowLayout flowLayout4 = new FlowLayout();

  //画板
  //DrawPanel drawTable = new DrawPanel();

  //数据对象
  private Table table = new Table(); //表格数据,记录了节点的坐标等信息
  private Tree tree = new Tree(); //树
  private BinaryTree binaryTree = new BinaryTree(); //二叉树
  private Thread autoThread = new Thread(); //基本运行线程
  private int index = -1;
  private String now = new String(); //演示的状态,线程中要用到
  private int fps = 1; //频率
  private boolean travel = false;
  private String flag=new String("");//判断是遍历二叉树还是树

  //Construct the frame
  public Frame1() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  //Component initialization
  private void jbInit() throws Exception {
    contentPane = (JPanel)this.getContentPane();
    contentPane.setLayout(borderLayout1);
    this.setSize(new Dimension(600, 540));
    this.setTitle("Frame Title");
    statusBar.setText(" ");
    jMenuFile.setText("File");
    jMenuFileExit.setText("Exit");
    jMenuFileExit.addActionListener(new Frame1_jMenuFileExit_ActionAdapter(this));
    jMenuHelp.setText("Help");
    jMenuHelpAbout.setText("About");
    jMenuHelpAbout.addActionListener(new Frame1_jMenuHelpAbout_ActionAdapter(this));
    stop.setFont(new java.awt.Font("Dialog", 0, 15));
    stop.setPreferredSize(new Dimension(73, 25));
    stop.setActionCommand("pause");
    stop.setText("stop");
    stop.addActionListener(new Frame1_stop_actionAdapter(this));
    flowLayout5.setAlignment(FlowLayout.RIGHT);
    flowLayout5.setHgap(18);
    flowLayout5.setVgap(5);
    jPanel4.setLayout(gridLayout1);
    slider.setOrientation(JSlider.HORIZONTAL);
    slider.setInverted(false);
    slider.setMinimum(0);
    slider.setMaximum(20);
    slider.setValue(1);
    slider.setMajorTickSpacing(10);
    slider.setMinorTickSpacing(5);
    slider.setPaintLabels(false);
    slider.setPaintTicks(false);
    slider.setPaintTrack(true);
    slider.setAlignmentX( (float) 0.5);
    slider.setDebugGraphicsOptions(0);
    slider.setDoubleBuffered(false);
    slider.setPreferredSize(new Dimension(195, 24));
    slider.setRequestFocusEnabled(true);
    slider.setToolTipText(""+slider.getValue());
    slider.setVerifyInputWhenFocusTarget(true);
    slider.addChangeListener( new ChangeListener(){
      //这是一个Swing组件event响应内部类
      public void stateChanged(ChangeEvent e) {
        fps=slider.getValue();

      }
    });



    drawTable.setBackground(Color.white);
    drawTable.setDebugGraphicsOptions(0);
    drawTable.setPreferredSize(new Dimension(300, 200));
    drawTable.setLayout(flowLayout4);
    flowLayout2.setAlignment(FlowLayout.RIGHT);
    flowLayout2.setHgap(20);
    flowLayout2.setVgap(5);
    binaryTreeInOrder.setFont(new java.awt.Font("Dialog", 0, 13));
    binaryTreeInOrder.setAlignmentX( (float) 5.0);
    binaryTreeInOrder.setActionCommand("inOrder");
    binaryTreeInOrder.setText("中序遍历");
    binaryTreeInOrder.addActionListener(new
                                        Frame1_binaryTreeInOrder_actionAdapter(this));
    // binaryTreeInOrder.addActionListener(new UI_binaryTreeInOrder_actionAdapter(this));
    auto.setFont(new java.awt.Font("Dialog", 0, 15));
    auto.setPreferredSize(new Dimension(73, 25));
    auto.setText("auto");
    auto.addActionListener(new Frame1_auto_actionAdapter(this));
    binaryTreePostOrder.setFont(new java.awt.Font("Dialog", 0, 13));
    binaryTreePostOrder.setAlignmentX( (float) 0.0);
    binaryTreePostOrder.setActionCommand("postOrder");
    binaryTreePostOrder.setText("后序遍历");
    binaryTreePostOrder.addActionListener(new
        Frame1_binaryTreePostOrder_actionAdapter(this));
    // binaryTreePostOrder.addActionListener(new
    //UI_binaryTreePostOrder_actionAdapter(this));
    borderLayout4.setHgap(10);
    borderLayout4.setVgap(5);
    panel.setLayout(borderLayout4);
    panel.setToolTipText("");
    openFile.setPreferredSize(new Dimension(25, 25));
    openFile.setText("jButton7");
    jPanel2.setBorder(null);
    jPanel2.setPreferredSize(new Dimension(100, 50));
    jPanel2.setLayout(flowLayout5);
    flowLayout1.setHgap(10);
    flowLayout1.setVgap(5);
    reset.setFont(new java.awt.Font("Dialog", 0, 15));
    reset.setPreferredSize(new Dimension(73, 25));
    reset.setText("reset");
    reset.addActionListener(new Frame1_reset_actionAdapter(this));
    //binaryTreeStart.addActionListener(new UI_binaryTreeStart_actionAdapter(this));
    input.setBorder(BorderFactory.createEtchedBorder());
    input.setDebugGraphicsOptions(0);
    input.setPreferredSize(new Dimension(470, 39));
    input.setLayout(flowLayout3);
    jPanel6.setDebugGraphicsOptions(0);
    jPanel6.setPreferredSize(new Dimension(432, 49));
    jPanel6.setLayout(flowLayout2);
    binaryTreePreOrder.setFont(new java.awt.Font("Dialog", 0, 13));
    binaryTreePreOrder.setPreferredSize(new Dimension(73, 29));
    binaryTreePreOrder.setActionCommand("preOrder");
    binaryTreePreOrder.setText("先序遍历");
    binaryTreePreOrder.addActionListener(new
        Frame1_binaryTreePreOrder_actionAdapter(this));
    // binaryTreePreOrder.addActionListener(new
    //UI_binaryTreePreOrder_actionAdapter(this));
    jPanel14.setBorder(BorderFactory.createEtchedBorder());
    jPanel14.setDebugGraphicsOptions(0);
    jPanel14.setPreferredSize(new Dimension(470, 39));
    jPanel14.setLayout(flowLayout1);
    text.setDebugGraphicsOptions(0);
    text.setDoubleBuffered(false);
    text.setPreferredSize(new Dimension(310, 22));
    text.setSelectionEnd(15);
    text.setSelectionStart(11);
    text.setText("");
    text.addActionListener(new Frame1_text_actionAdapter(this));
    //binaryTreeText.addActionListener(new UI_binaryTreetreeText_actionAdapter(this));
    treePreOrder.setFont(new java.awt.Font("Dialog", 0, 13));
    treePreOrder.setText("先根遍历");
    treePreOrder.addActionListener(new Frame1_treePreOrder_actionAdapter(this));
    treePostOrder.setFont(new java.awt.Font("Dialog", 0, 13));
    treePostOrder.setText("后根遍历");
    treePostOrder.addActionListener(new Frame1_treePostOrder_actionAdapter(this));
    jPanel4.setPreferredSize(new Dimension(90, 274));
    jRadioButtonBT.setFont(new java.awt.Font("Dialog", 0, 13));
    jRadioButtonBT.setText("二叉树");
    jRadioButtonBT.addActionListener(new Frame1_jRadioButtonBT_actionAdapter(this));
    jRadioButtonTree.setFont(new java.awt.Font("Dialog", 0, 13));
    jRadioButtonTree.setText("树");
    jRadioButtonTree.addActionListener(new
                                       Frame1_jRadioButtonTree_actionAdapter(this));
    flowLayout3.setAlignment(FlowLayout.LEFT);
    //jLabel1.setText("");
    borderLayout1.setHgap(5);
    borderLayout1.setVgap(5);
    gridLayout1.setColumns(1);
    gridLayout1.setRows(6);
    gridLayout1.setVgap(10);
    jMenuFile.add(jMenuFileExit);
    jMenuHelp.add(jMenuHelpAbout);
    jMenuBar1.add(jMenuFile);
    jMenuBar1.add(jMenuHelp);
    this.setJMenuBar(jMenuBar1);
    contentPane.add(statusBar, BorderLayout.SOUTH);
    contentPane.add(panel, BorderLayout.CENTER);
    panel.add(jPanel12, BorderLayout.EAST);
    panel.add(jPanel2, BorderLayout.SOUTH);
    jPanel2.add(jPanel14, null);
    jPanel14.add(reset, null);
    jPanel14.add(stop, null);
    jPanel14.add(auto, null);
    jPanel14.add(slider, null);
    jPanel4.add(binaryTreePreOrder, null);
    jPanel4.add(binaryTreeInOrder, null);
    jPanel4.add(binaryTreePostOrder, null);
    jPanel4.add(treePreOrder, null);
    jPanel4.add(treePostOrder, null);
    panel.add(drawTable, BorderLayout.CENTER);
    panel.add(jPanel6, BorderLayout.NORTH);
    jPanel6.add(input, null);
    input.add(jRadioButtonTree, null);
    input.add(jRadioButtonBT, null);
    input.add(text, null);
    input.add(openFile, null);
    panel.add(jPanel4, BorderLayout.WEST);
    buttonGroup1.add(jRadioButtonTree);
    buttonGroup1.add(jRadioButtonBT);
  }

  //File | Exit action performed
  public void jMenuFileExit_actionPerformed(ActionEvent e) {
    System.exit(0);
  }

  //Help | About action performed
  public void jMenuHelpAbout_actionPerformed(ActionEvent e) {
    Frame1_AboutBox dlg = new Frame1_AboutBox(this);
    Dimension dlgSize = dlg.getPreferredSize();
    Dimension frmSize = getSize();
    Point loc = getLocation();
    dlg.setLocation( (frmSize.width - dlgSize.width) / 2 + loc.x,
                    (frmSize.height - dlgSize.height) / 2 + loc.y);
    dlg.setModal(true);
    dlg.pack();
    dlg.show();
  }

  //Overridden so we can exit when window is closed
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      jMenuFileExit_actionPerformed(null);
    }
  }

  void jRadioButtonBT_actionPerformed(ActionEvent e) {
    binaryTreePreOrder.setEnabled(true);
    binaryTreeInOrder.setEnabled(true);
    binaryTreePostOrder.setEnabled(true);

    treePreOrder.setEnabled(false);
    treePostOrder.setEnabled(false);
    //flag = new String("BinaryTree");

  }

  void jRadioButtonTree_actionPerformed(ActionEvent e) {
    binaryTreePreOrder.setEnabled(false);
    binaryTreeInOrder.setEnabled(false);
    binaryTreePostOrder.setEnabled(false);
    treePreOrder.setEnabled(true);
    treePostOrder.setEnabled(true);
    //flag = new String("Tree");

  }

  void text_actionPerformed(ActionEvent e) {
    if (jRadioButtonBT.isSelected() == true) { //二叉树
      String s = text.getText();
      /***********************************************
             if(s is correct?)!!!!!!
       ************************************************/
      //binaryTree=new BinaryTree();
      //table=new Table();
      //drawTable=new DrawPanel();
      binaryTree.creatBinaryTree(s); //建造树
      table = binaryTree.table; //表的赋值
      drawTable.setTable(table); //drawPanel中的表成员的赋值
      //draw.add(drawTable);
      drawTable.repaint(); //重画
      drawTable.validate();

    }
    if (jRadioButtonTree.isSelected() == true) { //树
      String s = text.getText();
      /***********************************************
             if(s is correct?)!!!!!!
       ************************************************/
      //tree=new Tree();
      //table=new Table();
      //drawTable=new DrawPanel();
      tree.creatTree(s); //建造树
      table = tree.table; //表的赋值
      drawTable.setTable(table); //drawPanel中的表成员的赋值
      drawTable.repaint(); //重画
    }
  }

  void binaryTreePreOrder_actionPerformed(ActionEvent e) {
    if (table.isEmpty() == true) {
      return;
    }
    //使其他功能按钮不能使用
    text.setEnabled(false);
    binaryTreePreOrder.setEnabled(true);
    binaryTreeInOrder.setEnabled(false);
    binaryTreePostOrder.setEnabled(false);
    treePreOrder.setEnabled(false);
    treePostOrder.setEnabled(false);

    binaryTreePreOrder.setText("下一步");

    binaryTree.preOrder();
    table = binaryTree.table;
    drawTable.setTable(table);
    if (index < table.number) {
      drawTable.setCurrent(++index);
      drawTable.repaint();
    }
    if (index == table.number) { //重新开始
      index = -1;
      binaryTreePreOrder.setText("先序遍历");
      binaryTreeInOrder.setEnabled(true);
      binaryTreePostOrder.setEnabled(true);
    }

  }

  void binaryTreeInOrder_actionPerformed(ActionEvent e) {
    if (table.isEmpty() == true) {
      return;
    }
    //使其他功能按钮不能使用
    text.setEnabled(false);
    binaryTreePreOrder.setEnabled(false);
    binaryTreeInOrder.setEnabled(true);
    binaryTreePostOrder.setEnabled(false);
    treePreOrder.setEnabled(false);
    treePostOrder.setEnabled(false);

    binaryTreeInOrder.setText("下一步");

    binaryTree.inOrder(); //中序遍历
    table = binaryTree.table;
    drawTable.setTable(table);
    if (index < table.number) {
      drawTable.setCurrent(++index);
      drawTable.repaint();
    }
    if (index == table.number) { //重新开始
      index = -1;
      binaryTreeInOrder.setText("中序遍历");
      binaryTreePreOrder.setEnabled(true);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -