Section two //--------------------------------------------------------------------------------// Huffman树的建立class Huffman { public TreeNode tree; //结点对象 public Table t; //频率表对象 public PQueue p; //优先级队列 private int depth; //深度 char markerChar = insertRep(tree.left, tab, n, s1); // 对左子树进行递归操作 s2 = repr; s2 += "1"; //右1 insertRep(tree.right, tab, n, s2); // 对右子树进行递归操作 }}//--------------------------------------------------------------------------------// 窗口类的建立class WindowGrid extends JFrame implements ActionListener{ Huffman huff; //创建Huffman实例 boolean flag; //用于标志判断是否已经打开记录文件的标志符号 int record; //用于保存引入记录文件的数值变量 JButton buttoninput; //输入按钮 JButton buttonreset; //重置按钮 JButton buttonrecode; //反编码按钮 JTextArea textinput; //输入文本框 JTextArea textoutput; //输出文本框 JLabel labelinput; //输入标签 JLabel labeloutput; //输出标签 JLabel labeltable; //表格标签 JTable table; //表格控件 Object data[][]; //用于表格控件的存放数据 Object name[]; //属性名称 /工具条对象 JMenuBar menubar; //工具条 JMenu menu_file; //文件菜单栏目 JMenuItem item_open; //打开项目,用于打开要编码的文件 JMenuItem item_save; //保存项目 JMenuItem item_exit; //退出项目 JMenuItem item_open_binary; //打开二进制项目,用于打开反编码的文件 JMenuItem item_open_record; //打开记录补0的位数的项目 JMenu menu_edit; //编辑菜单拦目 JMenuItem item_copy; //复制项目 JMenuItem item_cut; //剪切项目 JMenuItem item_paste; //粘贴项目 ///滚动条 JScrollPane scrollpane_input; //输入文本框的滚动条 JScrollPane scrollpane_output; //输出文本框的滚动条 JScrollPane scrollpane_table; //列表的滚动条 //文件对话框 JFileChooser filechooser; //文件选择对话框 Container contenetPane = this.getContentPane(); //创建容器实例 //构造方法 WindowGrid(String s) { super(s); contenetPane.setLayout(null); //设置为空布局 menubar = new JMenuBar(); menu_file = new JMenu("文件"); item_open = new JMenuItem("打开编码文件"); item_save = new JMenuItem("保存"); item_open_binary = new JMenuItem("打开2进制文件"); //这两种打开文件的方式没有设置快捷键 item_open_record = new JMenuItem("打开记录文件"); menu_edit = new JMenu("编辑"); item_copy = new JMenuItem("复制"); item_cut = new JMenuItem("剪切"); item_paste = new JMenuItem("粘贴"); item_exit = new JMenuItem("退出"); filechooser = new JFileChooser("c:/"); //设置初始路径 flag = false; //设置没有引入记录文件 item_open.setAccelerator(KeyStroke.getKeyStroke('o')); //设置快捷键 item_save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); item_exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK)); item_copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); item_cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK)); item_paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK)); menu_file.add(item_open); //添加组件 menu_file.addSeparator(); //分隔符 menu_file.add(item_open_binary); menu_file.addSeparator(); menu_file.add(item_open_record); menu_file.addSeparator(); menu_file.add(item_save); menu_file.addSeparator(); menu_file.add(item_exit); menu_edit.add(item_copy); menu_edit.addSeparator(); menu_edit.add(item_cut); menu_edit.addSeparator(); menu_edit.add(item_paste); menubar.add(menu_file); menubar.add(menu_edit); setJMenuBar(menubar); buttoninput = new JButton("编码"); buttoninput.setBounds(100,400,150,50); //X,Y,WIDTH,HEIGHT 设置大小和显示位置 buttonreset = new JButton("重置"); buttonreset.setBounds(700,400,150,50); //X,Y,WIDTH,HEIGHT 设置大小和显示位置 buttonrecode = new JButton("反编码"); buttonrecode.setBounds(380,400,150,50); //X,y,Width,Height textinput = new JTextArea(); textoutput = new JTextArea(); labelinput = new JLabel("请在此输入要输入的字符串",JLabel.CENTER); labelinput.setBounds(100,50,200,50); labeloutput = new JLabel("您输入的字符串编码后的结果为",JLabel.CENTER); labeloutput.setBounds(100,150,200,50); labeltable = new JLabel("输入字符串编码信息表:",JLabel.CENTER); name = new Object[3];//存储表格空间的列显示 name[0] = "字符"; name[1] = "频率"; name[2] = "编码结果"; buttoninput.addActionListener(this); //为按钮添加事件监视器 buttonreset.addActionListener(this); buttonrecode.addActionListener(this); item_copy.addActionListener(this); item_cut.addActionListener(this); item_paste.addActionListener(this); item_open.addActionListener(this); item_save.addActionListener(this); item_exit.addActionListener(this); item_open_binary.addActionListener(this); item_open_record.addActionListener(this); scrollpane_input = new JScrollPane(textinput); scrollpane_output = new JScrollPane(textoutput); scrollpane_input.setBounds(300,50,400,80); scrollpane_output.setBounds(300,150,400,80); contenetPane.add(scrollpane_input); //添加各个组件 contenetPane.add(scrollpane_output); contenetPane.add(labelinput); contenetPane.add(labeloutput); contenetPane.add(buttoninput); contenetPane.add(buttonreset); contenetPane.add(buttonrecode); contenetPane.validate(); setBounds(0,0,1000,600); //x,y,kuan,gao setVisible(true); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); }