import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Enumeration;

import javax.comm.CommPortIdentifier;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.UnsupportedCommOperationException;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Example{  
	/*
	 * 串口通信界面制作！
	 * */
	SerialPort  serialPort = null;
	JPanel mb1,mb2,mb3;
	JFrame jf=new JFrame("串口通信！Make in Fablab");  
	JTextArea t1=new JTextArea(8,30);
	JScrollPane jsp1=new JScrollPane(t1);
	JButton an1,an2;
	JLabel bq1,bq2;
	JTextField wbk,wbk2;
	public Example(){ 
	
		 mb1=new JPanel();
		 mb2=new JPanel();
		 mb3=new JPanel();
		 
		 bq1=new JLabel("串口");
		 bq2=new JLabel("波率");
		 
		 wbk=new JTextField(10);
		 wbk2=new JTextField(10);
		
		 an1=new JButton("打开");
		 an1.addActionListener(new ActionListener() {
/*按钮处理事件
 * */
			public void actionPerformed(ActionEvent arg0) {
				final String w=wbk.getText();
				String w2=wbk2.getText();
				final int i=Integer.parseInt(w2);
			
Thread t=new Thread(){
	public void run() {
		Enumeration<?> en = CommPortIdentifier.getPortIdentifiers();
		CommPortIdentifier portId = null;
		CommPortIdentifier portId2;
		String portname;
		String rate;
		String data;
		String stop;
		String parity;
		SerialPort  serialPort = null;
		// TODO Auto-generated method stub
		
	
		while (en.hasMoreElements()) {
//			System.out.println("还没找到");
			portId = (CommPortIdentifier) en.nextElement();
			// 如果端口类型是串口，则打印出其端口信息
			if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
				System.out.println(portId.getName());
				if(portId.getName().equalsIgnoreCase(w)){
					
					try {
						serialPort = (SerialPort) portId.open("JavaRs232", 5);
						 serialPort.setSerialPortParams(i, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
						 
								
						 while(true){
									InputStream    inputStream = serialPort.getInputStream();
									BufferedReader br=new BufferedReader(new InputStreamReader(inputStream));
									String s=Utils.getTextFromStream(inputStream);
									
t1.append(s+"\n");
br.close();
									inputStream.close();
						 }
						 
						 
						
					}
					catch (PortInUseException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (UnsupportedCommOperationException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
			}
		};
}	;		
t.start();
		
			} 
			
		 });
		 an2=new JButton("取消");
		 an2.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent arg0) {
				 jf.setVisible(false);
			}
		});
		 
		 /*
		  * 板块化制作界面模型
		  * 
		  * */
		 
		 mb1.add(jsp1);
		 mb2.add(bq1);mb2.add(wbk);mb2.add(bq2);mb2.add(wbk2);
		 mb3.add(an1);mb3.add(an2);
		 jf.setLayout(new GridLayout(3,1));
		 
		jf.add(mb1);jf.add(mb2);  jf.add(mb3);         
		jf.setVisible(true);     
		jf.pack();          
	    
		}      
	public static void main(String args[]){  
		new Example();   //启用界面类
		}
	}