在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例常规Java编程 → 数据挖掘:数据预处理及Apriori算法

数据挖掘:数据预处理及Apriori算法

常规Java编程

下载此实例
  • 开发语言:Java
  • 实例大小:0.06M
  • 下载次数:37
  • 浏览次数:483
  • 发布时间:2018-01-06
  • 实例类别:常规Java编程
  • 发 布 人:810206357
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 算法 Apriori 数据挖掘

实例介绍

【实例简介】

 可以使用文件选择器选择文件将txt文件转为Jtable表格,可以对表格进行删除添加 求行和和平均,求列和和平均,可以简单排序,查询,若导入的为满足要求的表格 形如(T,F)格式的,可以进行apriori算法得出关联规则

【实例截图】


from clipboard

from clipboard

from clipboard


from clipboard






【核心代码】


package dataOperation;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

import java.util.regex.Pattern;
import java.util.regex.Matcher;


public class DataOperation extends JFrame{

	CardLayout cl = new CardLayout();
	public static int point=0;//记录卡片在第几张
	public int record=0;//记录一共有多少张卡  一直处于表格数组尾部
	Container c = getContentPane(); //容器
	String string = "Data_Operation";//初始标题
	private static final long serialVersionUID = 6345343829488769567L;
	private JFileChooser jFileChooser1 = new JFileChooser(new File("."));
	private JPopupMenu Pop = new JPopupMenu();
	private JMenuBar jmb = new JMenuBar();
	private JMenu File = new JMenu("文件");
	private JMenu Edit = new JMenu("编辑");
	private JMenu Help = new JMenu("帮助");
	private JMenu Tool = new JMenu("工具");
	
	private JMenuItem Import = new JMenuItem("导入");
	private JMenuItem Outport = new JMenuItem("导出");
	private JMenuItem Delete = new JMenuItem("删除");
	private JMenuItem Add = new JMenuItem("添加");
	private JMenuItem Merge = new JMenuItem("合并");
	private JMenuItem previous = new JMenuItem("上一张表");
	private JMenuItem next = new JMenuItem("下一张表");
	private JMenuItem first = new JMenuItem("第一张表");
	private JMenuItem last = new JMenuItem("最后一张表");
	private JMenuItem colSumAndAvg = new JMenuItem("求列和及平均");
	private JMenuItem rowSumAndAvg = new JMenuItem("求行和及平均");
	private JMenuItem apriori = new JMenuItem("频繁项集");
	private JMenuItem relationTable = new JMenuItem("导出关系表");
	private JMenuItem saveAs = new JMenuItem("另存为");
	private JMenuItem im = new JMenuItem("导入");
	private JMenuItem inquire1 = new JMenuItem("按值查询");
	private JMenuItem inquire2 = new JMenuItem("按范围查询");
	
	

	public DefaultTableModel[] tableModel=new DefaultTableModel[20];//最多可以二十张卡
	public JTable[] table=new JTable[10];
    	
//初始化	
	public DataOperation(){

		super();
		
		this.setLayout(new GridLayout(1,1));
		c.setLayout(cl);
		
		jmb.add(File);
		jmb.add(Edit);
		jmb.add(Tool);

  		File.add(Import);
  		File.add(Outport);

		
		Edit.add(Merge);
		Edit.add(colSumAndAvg);
		Edit.add(rowSumAndAvg);
		
		Tool.add(apriori);
		Tool.add(relationTable);
		Tool.add(inquire1);
		Tool.add(inquire2);
		Tool.add(previous);
		Tool.add(next);
		Tool.add(first);
		Tool.add(last);
		
		Pop.add(im);
		Pop.add(saveAs);
		Pop.add(Delete);
		Pop.add(Add);

		setJMenuBar(jmb);
		addPopMenu();
		this.setTitle(string);	
		this.setBackground(Color.white);
		addAction();		
		setVisible(true);
		setBounds(10, 10, 600, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}


	/**
	 * 为每个菜单项添加功能
	 */
	private void addAction() {
		// TODO 自动生成的方法存根
		//求频繁项集
		apriori.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				if(!tableModel[point-1].getValueAt(0, 1).equals("T")&&!tableModel[point-1].getValueAt(0, 1).equals("F")){
					JOptionPane.showMessageDialog(null, "当前表不能得出频繁项集!!", "当前表不能得出频繁项集!!", JOptionPane.ERROR_MESSAGE);
					return ;  //跳出方法体
				}
				
				@SuppressWarnings("rawtypes")
				final ArrayList<ArrayList> allList = new ArrayList<ArrayList>(); //记录总清单
				for(int i=0;i<tableModel[point-1].getRowCount();i  ){
					ArrayList<String> allRow = new ArrayList<String>();  //记录清单中每一行的数据
					allRow.add((String) tableModel[point-1].getValueAt(i, 0));
					for(int j=1;j<tableModel[point-1].getColumnCount();j  ){
						if(tableModel[point-1].getValueAt(i, j).equals("T")){
							allRow.add(tableModel[point-1].getColumnName(j));
						}
					}
					allList.add(allRow);
				}

				ArrayList<String> firstList = new ArrayList<String>();
				for(int i=1;i<tableModel[point-1].getColumnCount();i  ){
					firstList.add(tableModel[point-1].getColumnName(i));
				}
				Apriori.apriori(allList,firstList);

				
				
			}
			
		});
		//将普通表格转变为可以求频繁项集的表格
		relationTable.addActionListener(new ActionListener(){
			@Override	
			public void actionPerformed(ActionEvent arg0) {
				// TODO 自动生成的方法存根
				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				if(tableModel[point-1].getValueAt(0, 1).equals("T")||tableModel[point-1].getValueAt(0, 1).equals("F")){
				JOptionPane.showMessageDialog(null, "当前表已经是关系表!!", "当前表已经是关系表!!", JOptionPane.ERROR_MESSAGE);
				return;  //跳出方法体
				
			}		
				@SuppressWarnings({ "rawtypes" })
				Vector<Vector> rowData = new Vector<Vector>();
				Vector<String> col = new Vector<String>();
				for(int i=0;i<tableModel[point-1].getColumnCount();i  ){
					if(tableModel[point-1].getColumnName(i).equals("sex")){
						continue;
					}
					else col.add(tableModel[point-1].getColumnName(i));
					
				}
				int nameCount=0;
				for(int i=0;i<tableModel[point-1].getRowCount();i  ){
					Vector<String> temp = new Vector<String>();
					temp.add("Item" nameCount  );
					for(int j = 1;j<tableModel[point-1].getColumnCount();j  ){
						if(tableModel[point-1].getColumnName(j).equals("sex")){
							continue;
						}
						double number ;
						if(((String) tableModel[point-1].getValueAt(i, j)).trim().equals("NA")||((String) tableModel[point-1].getValueAt(i, j)).trim().equals("NaN")){
							number=0;
							
						}
						else{ 
							number=Double.valueOf((String) tableModel[point-1].getValueAt(i, j));
							}
						if(number<60.00) temp.add("F");
						else temp.add("T");

					}
					rowData.add(temp);
				}
				DefaultTableModel model = new DefaultTableModel(rowData,col);
				JTable tempTable = new JTable(model);
				try {
					save(tempTable);
				} catch (IOException e) {
					// TODO 自动生成的 catch 块
					e.printStackTrace();
				}
			
			}
			
		});
		
		//按照特定值查询
		inquire1.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO 自动生成的方法存根
				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				final JPanel panel = new JPanel();
				final JDialog temp = new JDialog();
				//temp.setLayout(null);
				temp.add(panel,BorderLayout.CENTER);
				
				final JLabel jl1 = new JLabel("属性:");
				panel.add(jl1);
				final JTextField aText = new JTextField(7);
				//aText.setSize(10, 5);
				panel.add(aText);
				final JLabel jl2 = new JLabel("查询值:");
				panel.add(jl2);
				final JTextField bText = new JTextField(7);
				panel.add(bText);
				JButton jb = new JButton("查询");
				panel.add(jb);
				jb.addActionListener(new ActionListener(){

					@Override
					public void actionPerformed(ActionEvent arg0) {
						// TODO 自动生成的方法存根
						
						String property = aText.getText();   //获得输入的属性
						String value = bText.getText();   //获得要查询的值
						@SuppressWarnings("rawtypes")
						Vector<Vector> rowData = new Vector<Vector>();
						Vector<String> colData = new Vector<String>();
						for(int i=0;i<tableModel[point-1].getColumnCount();i  ){
							colData.add(tableModel[point-1].getColumnName(i));
						}
						boolean flag=false;
						int num;
						for(num=0;num<tableModel[point-1].getColumnCount();num  ){
							if(property.equals(tableModel[point-1].getColumnName(num))){
								flag=true;
								break;
							}
						}
						if(!flag){
							
							JOptionPane.showMessageDialog(null, "属性输入错误!!", "属性输入错误!!", JOptionPane.ERROR_MESSAGE);
						}
						
						for(int rowNum=0;rowNum<tableModel[point-1].getRowCount();rowNum  ){
							if( value.equals(((String) tableModel[point-1].getValueAt(rowNum, num)).trim())){
								
								Vector<String> temp = new Vector<String>();
								for(int colNum=0;colNum<tableModel[point-1].getColumnCount();colNum  ){
									temp.add((String) tableModel[point-1].getValueAt(rowNum, colNum));
								}
								rowData.add(temp);
								
							}
							
						}							
						final JDialog temp1 = new JDialog();
						JPanel panel1 = new JPanel();
						
						
						temp1.add(panel1);
						
						DefaultTableModel model= new DefaultTableModel(rowData,colData);
						final JTable newTable = new JTable(model);
						JScrollPane scrollPane = new JScrollPane(newTable);
						//tableAddPop();
						temp1.add(scrollPane);
						
						///////////////////////////////////        需要修改
						JButton j = new JButton("导出为TXT文件");
						temp1.add(j,BorderLayout.SOUTH);

						j.addActionListener(new ActionListener(){
							public void actionPerformed(ActionEvent e){
								try {
									save(newTable);
								} catch (IOException e1) {
									// TODO 自动生成的 catch 块
									e1.printStackTrace();
								}
								temp1.setVisible(false);
								
							}
						});
											
						temp1.setBounds(400,400,400,400);
						temp1.setVisible(true);
						
						temp.setVisible(false);
					}
					
				});
				
				
				
				
				
				
				temp.setBounds(500, 300, 400, 150);
				temp.setBackground(Color.white);
				temp.setTitle("inquire");
				
				temp.setVisible(true);
				
			}
			
		});
	
		
	//按照指定范围查询
		inquire2.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO 自动生成的方法存根
				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				final JPanel panel = new JPanel();
				final JDialog temp = new JDialog();
				//temp.setLayout(null);
				temp.add(panel,BorderLayout.CENTER);
				final JLabel jl1 = new JLabel("属性:");
				panel.add(jl1);
				final JTextField aText = new JTextField(7);
				panel.add(aText);
				final JLabel j2 = new JLabel("查找范围:");
				panel.add(j2);
				final JTextField bText = new JTextField(5);
				panel.add(bText);
				final JLabel j3 = new JLabel("~");
				panel.add(j3);
				final JTextField cText = new JTextField(5);
				panel.add(cText);
				JButton jb = new JButton("查询");
				panel.add(jb);
				
				jb.addActionListener(new ActionListener(){

					@Override
					public void actionPerformed(ActionEvent arg0) {
						// TODO 自动生成的方法存根
						String property = aText.getText(); //获得要查找的属性
						String value1 = bText.getText();  //获得查找范围的左部
						String value2 = cText.getText();  //获得查找范围的右部
						@SuppressWarnings("rawtypes")
						Vector<Vector> rowData = new Vector<Vector>();
						Vector<String> colData = new Vector<String>();
						for(int i=0;i<tableModel[point-1].getColumnCount();i  ){
							colData.add(tableModel[point-1].getColumnName(i));
						}
						boolean flag=false;
						int num;
						for(num=0;num<tableModel[point-1].getColumnCount();num  ){
							if(property.equals(tableModel[point-1].getColumnName(num))){
								flag=true;
								break;
							}
						}
						if(!flag){
							
							JOptionPane.showMessageDialog(null, "属性输入错误!!", "属性输入错误!!", JOptionPane.ERROR_MESSAGE);
						}
						for(int rowNum=0;rowNum<tableModel[point-1].getRowCount();rowNum  ){
							if( Double.valueOf(value1)<Double.valueOf((((String) tableModel[point-1].getValueAt(rowNum, num)).trim()))
                                  &&Double.valueOf((((String) tableModel[point-1].getValueAt(rowNum, num)).trim()))<Double.valueOf(value2)){
								
								Vector<String> temp = new Vector<String>();
								for(int colNum=0;colNum<tableModel[point-1].getColumnCount();colNum  ){
									temp.add((String) tableModel[point-1].getValueAt(rowNum, colNum));
								}
								rowData.add(temp);
								
							}
							
						}
						final JDialog temp1 = new JDialog();
						JPanel panel1 = new JPanel();
						
						
						temp1.add(panel1);
					
						DefaultTableModel model= new DefaultTableModel(rowData,colData);
						final JTable newTable = new JTable(model);
						JScrollPane scrollPane = new JScrollPane(newTable);
						temp1.add(scrollPane);
						
						
						JButton j = new JButton("导出为TXT文件");
						temp1.add(j,BorderLayout.SOUTH);

						j.addActionListener(new ActionListener(){
							public void actionPerformed(ActionEvent e){
								try {
									save(newTable);
								} catch (IOException e1) {
									// TODO 自动生成的 catch 块
									e1.printStackTrace();
								}
								
								temp1.setVisible(false);
								
							}
						});

						temp1.setBounds(400,400,400,400);
						temp1.setVisible(true);

						temp.setVisible(false);
					}
					
					
				});
				
				temp.setBounds(500, 300, 400, 150);
				temp.setBackground(Color.white);
				temp.setTitle("inquire");
				
				temp.setVisible(true);
				
			}
			
		});
		//求列和及平均值
		colSumAndAvg.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				DecimalFormat    df   = new DecimalFormat("######0.00");
				DefaultTableModel tableTemp ;
				tableTemp=tableModel[point-1];
				Vector<String> vector1 = new Vector<String>();//记录每一列总和
				Vector<String> vector2 = new Vector<String>();//记录每一列平均值
				double sum=0;//求总和 
				double avg=0;//求平均值
				vector1.add("总和");
				vector2.add("平均值");
				
				for(int colNum=1;colNum<tableTemp.getColumnCount();colNum  ){
					sum=0;
					for(int rowNum=0;rowNum<tableTemp.getRowCount();rowNum  ){
						if( !isNumeric((String)tableTemp.getValueAt(rowNum, colNum)))
							sum =0;
						else sum =Double.valueOf((String) tableTemp.getValueAt(rowNum, colNum));
					}
					vector1.add(String.valueOf(df.format(sum)));
					avg=sum/tableTemp.getRowCount();
					vector2.add(String.valueOf(df.format(avg)));
				}
				tableModel[point-1].addRow(vector1);
				tableModel[point-1].addRow(vector2);
			}

			private boolean isNumeric(String str) {
				// TODO 自动生成的方法存根
				 Pattern pattern = Pattern.compile("-?[0-9] \\.?[0-9]*");
			        Matcher isNum = pattern.matcher(str);
			        if (!isNum.matches()) {
			            return false;
			        }
			        return true;
			}


			
		});
		
		//求行和及平均值
		rowSumAndAvg.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				DecimalFormat    df   = new DecimalFormat("######0.00");
				DefaultTableModel tableTemp ;
				tableTemp=tableModel[point-1];
				Vector<String> vector1 = new Vector<String>();//记录每一行总和
				Vector<String> vector2 = new Vector<String>();//记录每一行平均值
				double sum=0;//求总和 
				double avg=0;//求平均值
			
				for(int rowNum=0;rowNum<tableTemp.getRowCount();rowNum  ){
					sum=0;
					for(int colNum=2;colNum<tableTemp.getColumnCount();colNum  ){
						if( !isNumeric((String)tableTemp.getValueAt(rowNum, colNum)))
							sum =0;
						else sum =Double.valueOf((String) tableTemp.getValueAt(rowNum, colNum));
					}
					vector1.add(String.valueOf(df.format(sum)));
					avg=sum/(tableTemp.getColumnCount()-2);
					vector2.add(String.valueOf(df.format(avg)));
				}
				tableModel[point-1].addColumn("总和", vector1);
				tableModel[point-1].addColumn("平均值", vector2);
			}

			private boolean isNumeric(String str) {
				// TODO 自动生成的方法存根
				 Pattern pattern = Pattern.compile("-?[0-9] \\.?[0-9]*");
			        Matcher isNum = pattern.matcher(str);
			        if (!isNum.matches()) {
			            return false;
			        }
			        return true;
			}

		});
		//导入功能
		Import.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				point  ;//此时第几张卡显示
				record  ;//此时一共有几张卡
				open();
				//string = "Data_Operation_表格1";
				cl.last(c);
				setTitle("Data_Operation_表格" record "_共" record "张表");
				
			}

		});
		//导入功能
		im.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				point  ;//此时第几张卡显示
				record  ;//此时一共有几张卡
				open();
				//setTitle("Data_Operation 表格" point);
				cl.last(c);
				setTitle("Data_Operation_表格" record "_共" record "张表");
			}
		});
		//导出功能
		Outport.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				if(point<1){
					JOptionPane.showMessageDialog(null, "当前无表", "当前无表", JOptionPane.ERROR_MESSAGE);
				}
				else{
					try {
						save(table[point-1]);
				    } catch (IOException e1) {
					// TODO 自动生成的 catch 块
				    	e1.printStackTrace();
				    }
				
				}
			}
		});
		//导出功能 另存为
		saveAs.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				
				if(point<1){
					JOptionPane.showMessageDialog(null, "当前无表", "当前无表", JOptionPane.ERROR_MESSAGE);
				}
				else{
					try {
						save(table[point-1]);
				    } catch (IOException e1) {
					// TODO 自动生成的 catch 块
				    	e1.printStackTrace();
				    }
				
				}
				
			}
		});

		//删除选定行
		Delete.addActionListener(new ActionListener(){                                                                              //
																																	//
			@Override																												//
			public void actionPerformed(ActionEvent e) {																			//
				// TODO 自动生成的方法存根
				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}//
				int[] selectedRows = table[point-1].getSelectedRows();    //删除选中行													//
				for(int row = 0;row<selectedRows.length;row  ){																		//
					tableModel[point-1].removeRow(selectedRows[row]-row);															//
				}																													//
			}																														//
																																	//
		});		
		//在末尾添加空白行
		Add.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {          //在末尾添加一行空白行
				// TODO 自动生成的方法存根
				

				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				JTextField aTextField=new JTextField(15);
				
				String[] rowValues = {aTextField.getText(),aTextField.getText()};
				tableModel[point-1].addRow(rowValues);
				
			}
			
		});
		//合并功能
		Merge.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根

				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				if(point==1){
					JOptionPane.showMessageDialog(null, "当前只有一张表!无法合并!", "当前只有一张表!无法合并!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				final JPanel panel = new JPanel();
				final JDialog temp = new JDialog();
				
				temp.add(panel,BorderLayout.CENTER);
				
				final JLabel jl1 = new JLabel("表:");
				panel.add(jl1);
				
				final JTextField aText = new JTextField(6);
				panel.add(aText);
				final JLabel jl2 = new JLabel("表:");
				panel.add(jl2);
				final JTextField bText = new JTextField(6);
				panel.add(bText);
				final JLabel jl3 = new JLabel("关键字:");
				panel.add(jl3);
				final JTextField cText = new JTextField(10);
				panel.add(cText);
				
				JButton j1 = new JButton("合并");
				panel.add(j1);
				temp.setBounds(400,400,250,125);
				temp.setVisible(true);

				j1.addActionListener(new ActionListener(){

					@Override
					public void actionPerformed(ActionEvent arg0) {
						// TODO 自动生成的方法存根
						if(record<2){
							JOptionPane.showMessageDialog(null, "当前只有一张表!!", "当前只有一张表!!", JOptionPane.ERROR_MESSAGE);
							
						}else if(aText.getText().length()<1||!isNum(Double.valueOf(aText.getText()))||bText.getText().length()<1||!isNum(Double.valueOf(aText.getText()))
								||cText.getText().length()<1){
							JOptionPane.showMessageDialog(null, "输入错误!!", "输入错误!!", JOptionPane.ERROR_MESSAGE);
						}
							else{
							
							temp.setVisible(false);
							record  ; point=record;                           //新建表,表格指针自动加一,必须写在这儿    此时最后一张卡显示  每次新建一张表,point必定与record相等
							
							double num1= Double.valueOf(aText.getText());
							double num2= Double.valueOf(bText.getText());
							String key = cText.getText();
							String[] newCol = new String[tableModel[(int) (num1-1)].getColumnCount() tableModel[(int) (num2-1)].getColumnCount()-1];
							newCol=dealCol(newCol,(int)num1,(int)num2,key);
							String[][] table1 = new String[tableModel[(int) (num1-1)].getRowCount()][tableModel[(int) (num1-1)].getColumnCount()]; //新建两个二维数组分别收纳表格内的数据
							String[][] table2 = new String[tableModel[(int) (num2-1)].getRowCount()][tableModel[(int) (num2-1)].getColumnCount()];
							
							
							for(int i=0;i<tableModel[(int) (num1-1)].getRowCount();i  ){
								for(int j=0;j<tableModel[(int)(num1-1)].getColumnCount();j  ){
									table1[i][j]=(String) tableModel[(int) (num1-1)].getValueAt(i, j);
								}
							}
							for(int i=0;i<tableModel[(int) (num2-1)].getRowCount();i  ){
								for(int j=0;j<tableModel[(int)(num2-1)].getColumnCount();j  ){
									table2[i][j]=(String) tableModel[(int) (num2-1)].getValueAt(i, j);
								}
							}//将要合并的两个表导入到新建好的二维数组中
							int rowNum=table1.length;  //合并后的二维数组维数
							
							for(int i=0;i<table2.length;i  ){
								boolean flag=true;//设立标志位 相等为false 不等为true
								for(int j=0;j<table1.length;j  ){
									if(table2[i][0].equals(table1[j][0])){
										flag=false;
										break;
									}	
									
								}
								if(flag)   rowNum;
							}
							
							System.out.println(rowNum);
							String[][] table3= new String[rowNum][newCol.length];//建立合并的数组 

							int rowCount=0;//记录合并后新数组的维度数 横向
							int colCount=0;//记录合并后新数组的列数 纵向
							for(int i=0;i<table1.length;i  ){//先将表格1数组的关键字和数据写入到合并的数组中
								for(int j=0;j<table1[i].length;j  ){
									table3[rowCount][j]=table1[i][j];////////////
									
								}
								rowCount  ;
			                    
							}
							
							boolean flag;
							for(int i=0;i<table2.length;i  ){
								colCount=table1[0].length;
								flag=true ;//重制标志位  相等为false 不等为true
								for(int j=0;j<table3.length;j  ){
									if(table2[i][0].equals(table3[j][0])){
										flag =false;
										for(int k=1;k<table2[i].length;k  ){
											
											table3[j][colCount  ]=table2[i][k];
											
											
											
										}

										break;
									}
									
								}
							                   // 如果表2中没找到与表一中关键字相等的项
								if(flag){											//
									table3[rowCount][0]=table2[i][0];	
									colCount = table1[0].length;			        //
									for(int x=1;i<colCount;i  ){					//
										table3[rowCount][x]="Na";					//
									}												//
									for(int m=0;m<table2[i].length;m  ){
										if(tableModel[(int) (num2-1)].getColumnName(m).equals(cText.getText())){       //
											System.out.println(tableModel[(int) (num2-1)].getColumnName(m));
											continue;
										}
										table3[rowCount][colCount  ]=table2[i][m];	//
									}
									//
									rowCount  ;										//
								}													//
							
							}
							
							for(int i=0;i<table3.length;i  ){                       //如果新建的表内有控制 则变为Na
								for(int j=0;j<table3[i].length;j  ){
									if(table3[i][j]==null||table3[i][j].equals("")){
										table3[i][j]="Na";
									}
								}
							}

						    tableModel[record-1] = new DefaultTableModel(table3,newCol);
							table[record-1] = new JTable(tableModel[record-1]);  
							JScrollPane scrollPane = new JScrollPane(table[record-1]);  //滚动面板
							
					        c.add(scrollPane);                          //   添加进容器内
					                                        
					        cl.last(c);                                  //       直接显示最新导入的表格
				        
					        sort(tableModel[record-1],table[record-1]);//      
					        tableAddPop(table[record-1]);
					        setTitle("Data_Operation_表格" point "_共" record "张表");
						}						
						
					}
					private boolean isNum(Double num) {
						// TODO 自动生成的方法存根
						if(num<10&&num>0)  return true;
						return false;
					}

					private String[] dealCol(String[] newCol, int num1,
							int num2, String key) {
						// TODO 自动生成的方法存根
						int num=0; //列指针 走到哪指到哪

						for(int i=0;i<tableModel[num1-1].getColumnCount();i  ){

							newCol[num]=tableModel[num1-1].getColumnName(i);
							num  ;
						}
						for(int j=0;j<tableModel[num2-1].getColumnCount();j  ){
							if(key.equals(tableModel[num2-1].getColumnName(j)))
								continue;
							else newCol[num  ]=tableModel[num2-1].getColumnName(j);
						}

						return newCol;
						
						
						
					}
					
				});			
			}
		});
		
		
		//卡片布局选表 下一个
		next.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				point  ;
				if(point>record){
					JOptionPane.showMessageDialog(null, "当前为最后一张表!!", "当前为最后一张表!!", JOptionPane.ERROR_MESSAGE);
					point--;
				}
				else{ cl.next(c); setTitle("Data_Operation_表格" point "_共" record "张表");}
			}
			
		});
		//卡片布局选表 上一个
		previous.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				point--;
				if(point<1){
					JOptionPane.showMessageDialog(null, "当前为第一张表!!", "当前为第一张表!!", JOptionPane.ERROR_MESSAGE);
					point  ;
				}
				else {cl.previous(c);setTitle("Data_Operation_表格" point "_共" record "张表");}
				

			}
			
		});
		//卡片布局选表 第一个
		first.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				cl.first(c);
				setTitle("Data_Operation_表格1_共" record "张表");
				point=1;

			}
			
		});
		//卡片布局选表 最后一个
		last.addActionListener(new ActionListener(){////////////////////////////////

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				if(point==0){
					JOptionPane.showMessageDialog(null, "当前无表!!", "当前无表!!", JOptionPane.ERROR_MESSAGE);
					return;
				}
				cl.last(c);
				setTitle("Data_Operation_表格" record "_共" record "张表");
				point=record;

			}
			
		});
	}
/**
 * 给表格添加右键弹出式菜单
 * @param table
 */
	public void tableAddPop(final JTable table){
		table.addMouseListener(new MouseAdapter(){

	       	 public void mouseClicked(java.awt.event.MouseEvent evt) {  
	       	 if (evt.getButton() == java.awt.event.MouseEvent.BUTTON3) {  
	       	          //通过点击位置找到点击为表格中的行  
	       	          int focusedRowIndex = table.rowAtPoint(evt.getPoint());  
	       	          if (focusedRowIndex == -1) {  
	       	              return;  
	       	          }  
	       	          //将表格所选项设为当前右键点击的行  
	       	          table.setRowSelectionInterval(focusedRowIndex, focusedRowIndex);  
	       	          //弹出菜单  
	       	          Pop.show(table, evt.getX(), evt.getY());  
	       	      }  
	       	           }
	       	});
	}	
/**
 * 在窗体内添加弹出式菜单
 */
	public void addPopMenu(){
		this.addMouseListener(new MouseAdapter(){
			public void mouseReleased(MouseEvent e){
				if(e.isPopupTrigger()){
					Pop.show(e.getComponent(),e.getX(),e.getY());
				}
			}
		});

		
		
	}
/**
 * 打开TXT文件 以表格形式展现
 */

	private void open(){
		if(jFileChooser1.showOpenDialog(this)==JFileChooser.APPROVE_OPTION)
			open(jFileChooser1.getSelectedFile());
	}
	/**
	 * 打开TXT文件 以表格形式展现
	 */
	private void open(File file) {
		// TODO 自动生成的方法存根
		try{
			

			FileReader reader = new FileReader(file);
			BufferedReader br = new BufferedReader(reader);
			ArrayList<String> col = new ArrayList<String>();
			@SuppressWarnings("rawtypes")
			ArrayList<ArrayList> rowData= new ArrayList<ArrayList>();
			
	        String eachLine = null;//定义每一行
	        eachLine = br.readLine();
	        String[] line = eachLine.split("	");
	        for(int j=0;j<line.length;j  ){
    			col.add(line[j]);
  
    		}
	        while((eachLine = br.readLine()) != null){//读文件至末尾  
	        	//-----split(String):根据给定正则表达式的匹配拆分此字符串。  
	            String[] temp = eachLine.split("	");//每一行里的tab  
	              
	            ArrayList<String> row = new ArrayList<String>(); 
	            
	            for(int i = 0; i < temp.length; i  ){//遍历每一行 

	                row.add(temp[i].trim());//把每一行都加入row 
	                
	            }  
	            rowData.add(row);//再把每一个row的数据给rowData  
	            
	        }
	        br.close();
	        createTable(rowData, col);
		}
		catch(IOException ex){
		}
	}
	
/**
 * 根据处理好的ArrayList数组 创建表格	
 * @param rowData
 * @param col
 */
    @SuppressWarnings({ "unchecked", "rawtypes" })//////////////////////////////
	private void createTable(ArrayList<ArrayList> rowData, ArrayList<String> col) {
		// TODO 自动生成的方法存根
    	
    	int colSize=col.size();
    	
    	String[] colTemp = new String[colSize];
    	for(int i=0;i<col.size();i  ){        //将ArrayList<String> col转换为一维数组
    		colTemp[i]=col.get(i);
    		//System.out.println(colTemp[i]);     //测试输出数组是否正确
    	}
    	String[][] rowTemp = new String[rowData.size()][col.size()];
    	for(int i=0;i<rowData.size();i  ){       //将ArrayList<ArrayList>转换为二维数组
    		ArrayList<String> eachLine = rowData.get(i);
    		for(int j=0;j<col.size();j  ){
    			rowTemp[i][j] = (String) eachLine.get(j);
    			//System.out.print(rowTemp[i][j] " ");   //测试输出数组是否正确
    		}
    		System.out.println();
    	}
    	tableModel[record-1] = new DefaultTableModel(rowTemp,colTemp);
    	table[record-1] = new JTable(tableModel[record-1]);  
		JScrollPane scrollPane = new JScrollPane(table[record-1]);  //滚动面板
		
        c.add(scrollPane);                          //   添加进容器内
        cl.next(c);                                //       直接显示最新导入的表格 
        //点击表头排序
        sort(tableModel[record-1],table[record-1]);//      
        tableAddPop(table[record-1]);
        
        
	}

/**
 * 实现表格的排序功能
 */
	public void sort(DefaultTableModel tableModel, JTable table) {////////////////////////////////////////////////////////////
		// TODO 自动生成的方法存根
		RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableModel);
        table.setRowSorter(sorter);
	}

	/**
	 * 保存文件
                        参考http://www.devba.com/index.php/archives/2311.html
	 * @param table
	 * @throws IOException
	 */
	//没有设置当有行的值为空值时的情况
	private void save(JTable table) throws IOException{
		if(jFileChooser1.showSaveDialog(this)==JFileChooser.APPROVE_OPTION)
			save(jFileChooser1.getSelectedFile(),table);

	}
	/**
	 * 保存文件
                        参考http://www.devba.com/index.php/archives/2311.html
	 * @param table
	 * @throws IOException
	 */
	private void save(File file,JTable table) throws IOException {
		TableModel model=table.getModel();  
		BufferedWriter bWriter = new BufferedWriter(new FileWriter(file));
		for(int i=0;i<model.getColumnCount();i  ){
			bWriter.write(model.getColumnName(i));
			bWriter.write("\t");
		}
		bWriter.newLine();
		for(int i=0;i<model.getRowCount();i  ){
			for(int j=0;j<model.getColumnCount();j  ){
				if((String)model.getValueAt(i, j)==null||model.getValueAt(i, j).equals("")){
					bWriter.write("Na\t");
					System.out.println("Na\t");
				}
					
				else{
					bWriter.write(model.getValueAt(i, j).toString() "\t");
					System.out.println(model.getValueAt(i, j).toString() "\t");
				}
				//bWriter.write("\t");
			}
			System.out.println();
			bWriter.newLine();
		}
		bWriter.close();
		
	}

	public static void main(String[] args){
		new DataOperation();

		
	}

}


实例下载地址

数据挖掘:数据预处理及Apriori算法

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警