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

📄 hufpanel.java~72~

📁 数据结构综合实验,有各种排序算法和计算排序时间,最短路径算法,huffman编码解码.用图形界面实现.在jbuilder2006下运行通过.
💻 JAVA~72~
字号:
package datas2;


import javax.swing.JPanel;
import com.borland.jbcl.layout.XYLayout;
import com.borland.jbcl.layout.*;
import java.awt.Color;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.BorderFactory;
import javax.swing.*;
import java.awt.Font;
import javax.swing.border.TitledBorder;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class hufPanel extends JPanel {


    XYLayout xYLayout1 = new XYLayout();
    JLabel jLabel1 = new JLabel();
    JLabel jLabel2 = new JLabel();
    JScrollPane jScrollPane1 = new JScrollPane();
    JTextArea jTextArea1 = new JTextArea();
    JButton jButton1 = new JButton();
    JScrollPane jScrollPane2 = new JScrollPane();
    JTextArea jTextArea2 = new JTextArea();
    TitledBorder titledBorder1 = new TitledBorder("");
    JLabel jLabel3 = new JLabel();
    JTextField jTextField1 = new JTextField();
    JButton jButton2 = new JButton();
    JScrollPane jScrollPane3 = new JScrollPane();
    JTextArea jTextArea3 = new JTextArea();
    JButton jButton3 = new JButton();
    JTextField jTextField2 = new JTextField();
    //=================================================
    char leftWay = '0';
    char rightWay = '1';
    HuffNode[] hf;
    int count = 0;
//==================================================


    public hufPanel() {
        try {
            jbInit();
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
        this.setLayout(xYLayout1);
        this.setBackground(Color.lightGray);
        xYLayout1.setWidth(433);
        xYLayout1.setHeight(530);
        jLabel1.setFont(new java.awt.Font("隶书", Font.BOLD, 16));
        jLabel1.setForeground(Color.blue);
        jLabel1.setBorder(BorderFactory.createRaisedBevelBorder());
        jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
        jLabel1.setHorizontalTextPosition(SwingConstants.CENTER);
        jLabel1.setText("Huffman编码");
        jLabel2.setFont(new java.awt.Font("宋体", Font.BOLD, 13));
        jLabel2.setForeground(Color.blue);
        jLabel2.setBorder(BorderFactory.createEtchedBorder());
        jLabel2.setText("输入字符序列:");
        jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.
                                                  HORIZONTAL_SCROLLBAR_ALWAYS);
        jScrollPane1.setBorder(BorderFactory.createLineBorder(Color.black));
        jTextArea1.setBackground(Color.lightGray);
        jButton1.setFont(new java.awt.Font("宋体", Font.BOLD, 12));
        jButton1.setForeground(Color.blue);
        jButton1.setText("统计频率");
        jButton1.addActionListener(new hufPanel_jButton1_actionAdapter(this));
        jScrollPane2.setVerticalScrollBarPolicy(JScrollPane.
                                                VERTICAL_SCROLLBAR_ALWAYS);
        jScrollPane2.getViewport().setBackground(Color.lightGray);
        jScrollPane2.setBorder(BorderFactory.createLineBorder(Color.black));
        jTextArea2.setBackground(Color.lightGray);
        jLabel3.setFont(new java.awt.Font("宋体", Font.BOLD, 13));
        jLabel3.setForeground(Color.blue);
        jLabel3.setBorder(BorderFactory.createEtchedBorder());
        jLabel3.setText("输入编码字符:");
        jButton2.setFont(new java.awt.Font("宋体", Font.BOLD, 13));
        jButton2.setForeground(Color.blue);
        jButton2.setToolTipText("");
        jButton2.setText("查看结果");
        jButton2.addActionListener(new hufPanel_jButton2_actionAdapter(this));
        jScrollPane3.setHorizontalScrollBarPolicy(JScrollPane.
                                                  HORIZONTAL_SCROLLBAR_ALWAYS);
        jScrollPane3.setBorder(BorderFactory.createLineBorder(Color.black));
        jTextArea3.setBackground(Color.lightGray);
        jTextField1.setBackground(Color.lightGray);
        jButton3.setFont(new java.awt.Font("宋体", Font.BOLD, 13));
        jButton3.setForeground(Color.blue);
        jButton3.setText("解码结果");
        jButton3.addActionListener(new hufPanel_jButton3_actionAdapter(this));
        jTextField2.setBackground(Color.lightGray);
        this.add(jLabel1, new XYConstraints(103, 0, 305, 41));
        this.add(jLabel3, new XYConstraints(4, 374, 104, 34));
        this.add(jTextField1, new XYConstraints(114, 374, 219, 34));
        jScrollPane3.getViewport().add(jTextArea3);
        this.add(jButton2, new XYConstraints(3, 425, 104, 35));
        this.add(jScrollPane3, new XYConstraints(114, 425, 219, 35));
        this.add(jButton1, new XYConstraints(4, 122, 104, 35));
        this.add(jLabel2, new XYConstraints(4, 57, 104, 35));
        this.add(jScrollPane1, new XYConstraints(113, 57, 377, 35));
        this.add(jTextField2, new XYConstraints(114, 480, 219, 35));
        this.add(jButton3, new XYConstraints(3, 480, 104, 35));
        jScrollPane2.getViewport().add(jTextArea2);
        jScrollPane1.getViewport().add(jTextArea1);
        this.add(jScrollPane2, new XYConstraints(113, 122, 170, 232));
    }

    //=============================================================
     public  void buildTree(HuffNode[] h,int n)//建树 m n 代表什么
     {
       for(int i = 0, m = n; i < 2 * n - 2; i += 2, m ++)
       {
          mysort(h, i, m - 1);
          h[m] = new HuffNode(h[i].weight() + h[i + 1].weight());
          h[m].isLeaf = false;
          h[m].lChild = h[i];
          h[m].rChild = h[i + 1];
       }
      }
      public  void mysort(HuffNode[] a, int start, int end)
      {
        for(int i = start + 1; i <= end; i ++)
         for(int j = i; (j > start) && (a[j].weight() < a[j - 1].weight()); j --)
          swap(a, j, j -1);
       }
        public  void swap(HuffNode[] a, int i, int j)
         {
          HuffNode temp = a[i];
          a[i] = a[j];
          a[j] = temp;
          }
        public  void setLabel(HuffNode h)
         {
            if(!h.isLeaf)
                     {
                             h.lChild.label = '0';
                             h.lChild.label_Another = leftWay;
                             h.lChild.path = h.path + h.lChild.label;
                             h.rChild.label = '1';
                             h.lChild.label_Another = rightWay;
                             h.rChild.path = h.path + h.rChild.label;
                             setLabel(h.lChild);
                             setLabel(h.rChild);
                     }
             }
             public  String code(String s, HuffNode[] h)
             {
                     StringBuffer temp = new StringBuffer();//String temp = "";
                     for(int i = 0; i <s.length(); i ++)
                     {
                             for(int j = 0; j <h.length; j ++)
                                     if(s.charAt(i)== h[j].ch)
                                             {temp.append(h[j].path);
                                               System.out.println(h[j].path);}//temp += h[j].path;
                     }
                     return temp.toString();
             }
             public  String disCode(String s, HuffNode[] h)
             {
               StringBuffer temps_0 = new StringBuffer();
               StringBuffer temps_1 = new StringBuffer();
               for(int i = 0; i < s.length(); i ++)
                {
                 temps_0.append(s.charAt(i));//temps_0 += String.valueOf(s.charAt(i));
                 for(int j = 0; j <h.length; j ++)
                 if((temps_0.toString().equals(h[j].path))&&(h[j].isLeaf))
                 {
                   temps_1.append(h[j].ch);//temps_1+=String.valueOf(h[j].ch);
                   System.out.println("aaaaa====="+h[j].ch);
                   temps_0= new StringBuffer();
                 }
                 }
                 return temps_1.toString();
          }
//=====================================================================

    public void jButton1_actionPerformed(ActionEvent e) {
        jTextArea2.setText("");
        jTextArea2.setTabSize(4);
        jTextArea2.append("字母\t次数\t字符编码\n");
        //jTextArea1.setText("");
        String tongji = "";
        tongji = jTextArea1.getText();
        StringBuffer[] sb = new StringBuffer[26];
        for (int i = 0; i < sb.length; i++) {
            sb[i] = new StringBuffer();
        }
        for (int i = 0; i < tongji.length(); i++) {
            char a = tongji.charAt(i);
            switch (a) {
            case 'a':
                sb[0].append(tongji.charAt(i));
                break;
            case 'b':
                sb[1].append(tongji.charAt(i));
                break;
            case 'c':
                sb[2].append(tongji.charAt(i));
                break;
            case 'd':
                sb[3].append(tongji.charAt(i));
                break;
            case 'e':
                sb[4].append(tongji.charAt(i));
                break;
            case 'f':
                sb[5].append(tongji.charAt(i));
                break;
            case 'g':
                sb[6].append(tongji.charAt(i));
                break;
            case 'h':
                sb[7].append(tongji.charAt(i));
                break;
            case 'i':
                sb[8].append(tongji.charAt(i));
                break;
            case 'j':
                sb[9].append(tongji.charAt(i));
                break;
            case 'k':
                sb[10].append(tongji.charAt(i));
                break;
            case 'l':
                sb[11].append(tongji.charAt(i));
                break;
            case 'm':
                sb[12].append(tongji.charAt(i));
                break;
            case 'n':
                sb[13].append(tongji.charAt(i));
                break;
            case 'o':
                sb[14].append(tongji.charAt(i));
                break;
            case 'p':
                sb[15].append(tongji.charAt(i));
                break;
            case 'q':
                sb[16].append(tongji.charAt(i));
                break;
            case 'r':
                sb[17].append(tongji.charAt(i));
                break;
            case 's':
                sb[18].append(tongji.charAt(i));
                break;
            case 't':
                sb[19].append(tongji.charAt(i));
                break;
            case 'u':
                sb[20].append(tongji.charAt(i));
                break;
            case 'v':
                sb[21].append(tongji.charAt(i));
                break;
            case 'w':
                sb[22].append(tongji.charAt(i));
                break;
            case 'x':
                sb[23].append(tongji.charAt(i));
                break;
            case 'y':
                sb[24].append(tongji.charAt(i));
                break;
            case 'z':
                sb[25].append(tongji.charAt(i));
                break;
            default:
                break;
            }
        }
        //tongji=null;
        for (int i = 0; i < sb.length; i++) {
            if (sb[i].length() != 0) {
                count++;
            }
        }
        //========================初始化==================
        hf = new HuffNode[2 * count - 1];
        int n = 0;
        for (int i = 0; i < sb.length; i++) {
            if (sb[i].length() != 0) {
                hf[n] = new HuffNode(sb[i].charAt(0), sb[i].length());
                n++;
            }
        }
        buildTree(hf, count); //建树
        setLabel(hf[hf.length - 1]); //设置路径

        for (int i = 0; i < sb.length; i++) {
            if (sb[i].length() != 0) {
                char c = sb[i].charAt(0);
                String result = code(String.valueOf(c),hf);

                jTextArea2.append(String.valueOf(sb[i].charAt(0)) + "\t" +
                                  sb[i].length() + "\t"+result+"\n");
            }
        }
        //hf = new HuffNode[2 * count - 1];
    }

    public void jButton2_actionPerformed(ActionEvent e) {
        String in = jTextField1.getText();
        String out = code(in,hf);
        out = out.trim();
        jTextArea3.setText(out);
    }

    public void jButton3_actionPerformed(ActionEvent e) {
        String dis =  jTextArea3.getText();
        System.out.println(dis);
        String discode = disCode(dis,hf);
        jTextField2.setText(discode);
    }
}


class hufPanel_jButton3_actionAdapter implements ActionListener {
    private hufPanel adaptee;
    hufPanel_jButton3_actionAdapter(hufPanel adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton3_actionPerformed(e);
    }
}


class hufPanel_jButton2_actionAdapter implements ActionListener {
    private hufPanel adaptee;
    hufPanel_jButton2_actionAdapter(hufPanel adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton2_actionPerformed(e);
    }
}


class hufPanel_jButton1_actionAdapter implements ActionListener {
    private hufPanel adaptee;
    hufPanel_jButton1_actionAdapter(hufPanel adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton1_actionPerformed(e);
    }
}

⌨️ 快捷键说明

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