package org.file.win; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; import org.file.bean.FileBean; import org.file.util.Search; public class SearchFrame{ private static JFrame jf = new JFrame("search - file 软件"); private static JTable table; private static JTextField jText = new JTextField(30); private static JButton jButton = new JButton("搜索"); private static JPanel panel = new JPanel(); private static final Vector columnNames = new Vector(); private static volatile Vector> searchData = new Vector>(); static{ columnNames.add("名称"); columnNames.add("位置"); columnNames.add("类型"); columnNames.add("修改时间"); columnNames.add("大小"); } public SearchFrame() { Toolkit kit=Toolkit.getDefaultToolkit(); Dimension screenSize=kit.getScreenSize(); int screenWidth=screenSize.width; int screenHeight=screenSize.height; jf.setSize(screenWidth/2, 500); jf.setLocation(screenWidth/4, screenHeight/4); panel.add(jText); panel.add(jButton); jButton.addActionListener(new ActionListener() { public synchronized void actionPerformed(ActionEvent e) { String path = jText.getText(); ReftableData.refData(null,false); Search.search(path); } }); jf.add(panel,BorderLayout.NORTH); //以二维数组和一维数组来创建一个JTable对象 table = new JTable(); table.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e) { if(e.getClickCount()==1){ int row = table.getSelectedRow(); jText.setText((String)table.getValueAt(row, 1)); } } }); table.setShowGrid(true); synchronized (searchData) { CheckTableModle tableModel= new CheckTableModle(searchData,columnNames); table.setModel(tableModel); jf.add(new JScrollPane(table),BorderLayout.SOUTH); jf.pack(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } } public static class CheckTableModle extends DefaultTableModel { private static final long serialVersionUID = 1L; public CheckTableModle( Vector> data, Vector columnNames) { super(data,columnNames); } } public static void main(String[] args) { new SearchFrame(); try { ServerSocket server = new ServerSocket(8888); while (true) { Socket client = server.accept(); new Thread(new ServiceSocket(client)).start(); } } catch (IOException e) { e.printStackTrace(); } } //服务器进程 static class ServiceSocket implements Runnable { Socket client; public ServiceSocket(Socket client) { this.client = client; } public synchronized void run() { try { //3.获得输入流 InputStream is = client.getInputStream(); //获得流:可以对对象进行反序列化 ObjectInputStream ois=new ObjectInputStream(is); //4.读取用户输入信息 FileBean bean = (FileBean)ois.readObject(); System.out.println("接收:" + bean.getName() + " - "+bean.getPath() + " - "+bean.getSize() + " - "+bean.getType()+ " - "+ bean.getTime()); Vector v = new Vector(); if(bean !=null){ v.add(bean.getName()); v.add(bean.getPath()); v.add("1"); v.add("1"); v.add("1"); } ReftableData.refData(v,true); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } static class ReftableData{ public synchronized static void refData(Vector bean,boolean flag){ if(flag) searchData.add(bean); else searchData = new Vector>(); System.out.println(searchData + "-------------------------" + searchData.size()); CheckTableModle tableModel=new CheckTableModle(searchData,columnNames); table.setModel(tableModel); table.validate(); table.repaint(); } } }  //源代码片段来自云代码http://yuncode.net