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

📄 lzw.java

📁 多媒体实验
💻 JAVA
字号:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.*;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableColumn;

public class LZW extends JFrame{
	
	String ss = "ababababababaabbb";
	ArrayList<String> Kdir = new ArrayList<String>();
	ArrayList<String> dir = new ArrayList<String>();
	ArrayList<String> fandir = new ArrayList<String>();
	ArrayList<Integer> p = new ArrayList<Integer>();
	JLabel zifu=new JLabel("请输入要编码的字符串");
	JTextField tzifu=new JTextField();
	JTextField rtzifu=new JTextField();
	JButton bianma=new JButton("编码");
	JButton send=new JButton("发送");
	Object[][] pp={{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}} ;
	void view(){
		this.setLocation(100, 100);
		this.setSize(500,350);
		this.setVisible(true);
		this.addWindowListener(new MyWindowMonitor());
		this.setLayout(null);
		zifu.setBounds(10, 10, 150, 30);
		tzifu.setBounds(160, 10, 200, 30);
		bianma.setBounds(10, 70, 80, 20);
		rtzifu.setBounds(160, 70, 200, 30);
		send.setBounds(370, 70, 80, 20);
		this.add(zifu);
		this.add(tzifu);
		this.add(bianma);
		this.add(rtzifu);
		this.add(send);
		String[] n = { "压缩码", "源码" };
		TableColumn column = null;
		JTable table = new JTable(pp, n);
		table.setPreferredScrollableViewportSize(new Dimension(550, 80));
		table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
		for (int i = 0; i <2; i++) {
			// 利用 JTable 中的 getColumnModel()方法取得 TableColumnModel 对象;再利用
			// TableColumnModel 界面所定义的 getColumn()方法取
			// TableColumn 对象,利用此对象的 setPreferredWidth()方法就可以控制字段的宽度.
			column = table.getColumnModel().getColumn(i);
			if ((i % 2) == 0)
				column.setPreferredWidth(100);
			else
				column.setPreferredWidth(50);
		}

		JScrollPane scrollPane = new JScrollPane(table);
		scrollPane.setBounds(10, 100, 350, 250);
		this.add(scrollPane);
		 Lisbianma b1= new  Lisbianma();
		 Lissend b2 =new Lissend();
		 bianma.addActionListener(b1);
		 send.addActionListener(b2);
	}
	
	class MyWindowMonitor extends WindowAdapter {
		public void windowClosing(WindowEvent e) {
			setVisible(false);
			// notconnect();
			System.exit(0);
		
		}
	}
	
	class Lisbianma implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			Kdir.clear();
			p.clear();
			String s=tzifu.getText();
			
			for(int i=0;i<s.length();i++){
				String ax=s.substring(i,i+1);
				int count=0;
				for(int j=0;j<Kdir.size();j++){
					if(ax.equalsIgnoreCase(Kdir.get(j))){
						count++;
					}
				}
				if(count==0){
					Kdir.add(ax);
				}
			}
			bianyi(Kdir,s);
			String xianshi="";
			for(int i=0;i<p.size();i++){
				xianshi=xianshi+p.get(i);
			}
			rtzifu.setText(xianshi);
			for(int i=0;i<Kdir.size();i++){
				pp[i][0]=i;
				pp[i][1]=Kdir.get(i);
			}
				repaint();
			}	
	}
	
	class Lissend implements ActionListener{

		public void actionPerformed(ActionEvent e) {
			new send(Kdir,p).view();
		}
		
	}
	
	void bianyi(ArrayList<String> dir,String s){
		
		for(int i=0;i<s.length();){
			Character ex=s.charAt(i);
			System.out.println(ex);
			int count = 0;
			int xuanding=0;
			for(int j=0;j<dir.size();j++){
				
				int flag = 0;
				int k = dir.get(j).length();
				if(i+k>s.length()){
					flag++;
				}
				else{
					String ax=s.substring(i,i+k);
					if(ax.equalsIgnoreCase(dir.get(j))){
						
					}
					else{
						flag++;
					}
				}
				
				if(flag==0){
					if(dir.get(j).length()>count){
						count = dir.get(j).length();
						xuanding = j;
					}
				}
			}
			i=i+count;
			String ss= dir.get(xuanding);
			p.add(xuanding);
			if(i<s.length()){
				ss=ss+s.charAt(i);
				dir.add(ss);
			}
			
			//字符串匹配
			for(int x=0;x<dir.size();x++){
				System.out.println("dir:"+x+"  "+dir.get(x));
			}
			//System.out.println(xuanding);
		}
		System.out.println(dir.size());
		for(int i=0;i<p.size();i++)
			System.out.println(p.get(i));
	}
	
	
		
	public static void main(String[] args) {
		new LZW().view();
		//dir.add("a");
		//dir.add("b");
		//fandir.add("a");
		//fandir.add("b");
		//LZW s= new LZW();
		//s.bianyi(dir);
		//s.fanbianyi(dir);

	}

}

⌨️ 快捷键说明

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