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

📄 configurepane.java

📁 用于串口通讯测试的工具软件。完全使用java语言编写。
💻 JAVA
字号:
package com.zcsoft.jpsc.gui;

import javax.swing.*;
import javax.comm.*;
import java.awt.event.*;
import com.zcsoft.swing.*;
import com.zcsoft.comm.SerialPortComm;
import com.zcsoft.comm.SerialPortParam;
import javax.swing.text.*;
import java.util.ResourceBundle;
/**
 * <p>Title: 串口通信</p>
 * <p>Description: 串口通信实验</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: Zhicheng Software&Service Co. Ltd.</p>
 * @author 蒋智湘
 * @version 1.0
 */
/**
 * 串口参数配置界面
 */
public class ConfigurePane extends JPanel
{
	static ResourceBundle res = JpscToolkit.getStringResourceBundle();

	/** 端口配置 */
	private JComboBox cbBoudRate = new JComboBox(new Object[]{"9600", "4800", "2400"}),
		cbDataBits = new JComboBox(new Object[]{new Integer(SerialPort.DATABITS_8)
															, new Integer(SerialPort.DATABITS_7)
															, new Integer(SerialPort.DATABITS_6)
															, new Integer(SerialPort.DATABITS_5)}),
		cbStopBits = new JComboBox(new Object[]{new StopBits(SerialPort.STOPBITS_1)
															, new StopBits(SerialPort.STOPBITS_1_5)
															, new StopBits(SerialPort.STOPBITS_2)}),
		cbParity = new ZCComboBox(new ComboItem[]{
										new ComboItem(new Integer(SerialPort.PARITY_NONE), res.getString("config.parity.none"))
									, new ComboItem(new Integer(SerialPort.PARITY_ODD), res.getString("config.parity.odd"))
									, new ComboItem(new Integer(SerialPort.PARITY_EVEN), res.getString("config.parity.even"))});
	/** 接收方式 */
	private JComboBox cbReceiveMethod
			= new ZCComboBox(new ComboItem[]{
								 new ComboItem(SerialPortParam.METHOD_FIX_LENGTH, res.getString("config.receiveMethod.fixLength"))
								, new ComboItem(SerialPortParam.METHOD_FIX_DURATION, res.getString("config.receiveMethod.fixDuration"))
								, new ComboItem(SerialPortParam.METHOD_FIX_TERMINAL, res.getString("config.receiveMethod.fixTerminal"))
								, new ComboItem(SerialPortParam.METHOD_FREE, res.getString("config.receiveMethod.free"))});
	/** 接收方式对应的参数值 */
	JTextField txtMethodParam = new JTextField(6);

	public ConfigurePane()
	{
		this.add(cbBoudRate);
		this.add(cbDataBits);
		this.add(cbStopBits);
		this.add(cbParity);
		this.add(new JLabel(res.getString("config.receiveMethod")));
		this.add(cbReceiveMethod);
		this.add(new JLabel(res.getString("config.receiveMethod.value")));
		this.add(txtMethodParam);

		cbBoudRate.setEditable(true);
		cbBoudRate.setEditor(new ZCComboBoxEditor(new ZCIntTextField(180, Integer.MAX_VALUE, 4)));
		txtMethodParam.setInputVerifier(new MethodParamVerifier());
	}

	/**
	 * 将存储于SerialPortParam实例中的串口配置值显示到界面上
	 * @param argument 存储了串口参数配置值的SerialPortParam实例
	 */
	public void showConfigValue(SerialPortParam argument)
	{
		this.cbBoudRate.setSelectedItem(Integer.toString(argument.getBaudRate()));
		this.cbDataBits.setSelectedItem((new Integer(argument.getDataBits())));
		this.cbStopBits.setSelectedItem(new StopBits(argument.getStopBits()));
		this.cbParity.setSelectedItem(new Integer(argument.getParity()));
		this.cbReceiveMethod.setSelectedItem(argument.getReceiveMethod());
		this.txtMethodParam.setText(argument.getMethodParam());
	}

	/**
	 * 将用户在界面上输入的配置参数存入到SerialPortParam实例中
	 * @param store 不为null的SerialPortParam实例
	 */
	public void storeConfigValue(SerialPortParam store)
	{
		store.setBaudRate(Integer.parseInt((String)this.cbBoudRate.getSelectedItem()));
		store.setDataBits(((Integer)this.cbDataBits.getSelectedItem()).intValue());
		store.setStopBits(((StopBits)this.cbStopBits.getSelectedItem()).value);
		store.setParity(((Integer)this.cbParity.getSelectedItem()).intValue());
		store.setReceiveMethod((Integer)this.cbReceiveMethod.getSelectedItem());
		store.setMethodParam(this.txtMethodParam.getText().trim());
	}

	/**
	 * 判定用户输入的配置值是否合法。
	 *
	 * @return 输入了波特率,接收方式对应的参数值合法
	 */
	public boolean isParamValueValid()
	{
		return this.txtMethodParam.getInputVerifier().verify(this.txtMethodParam)
				&& ((String)this.cbBoudRate.getSelectedItem()).trim().length() > 0;
	}

	public void requestFocus()
	{
		super.requestDefaultFocus();
		this.cbBoudRate.requestFocus();
	}

	/** 接收方式对应的参数值的合法性检查 */
	class MethodParamVerifier extends InputVerifier
	{

		/**
		 *
		 * @return 定字结尾接收方式下,框内文本为空格分开的字节值序列;
		 *       定时接收方式下,框内文本为大于0但小于1分钟的整数。
		 */
		public boolean verify(JComponent target)
		{
			String paramValue = ((JTextField)target).getText().trim();
			Object method = cbReceiveMethod.getSelectedItem();
			if (SerialPortParam.METHOD_FIX_TERMINAL.equals(method))
			{
				return isByteArray(paramValue);
			}
			else
			{
				try
				{
					int num = Integer.parseInt(paramValue, 10);
					return num > 0
							&& (SerialPortParam.METHOD_FIX_DURATION.equals(method) && num <= 1000*60*10)
								|| (SerialPortParam.METHOD_FIX_LENGTH.equals(method) && num <= 512)
								|| SerialPortParam.METHOD_FREE.equals(method);
				}
				catch (NumberFormatException ex)
				{
					return false;
				}
			}
		}

		/**
		 * 判定是否为指定的字符串是否为以空格作为分隔符的字节数字序列。
		 * @param str
		 * @return
		 */
		public boolean isByteArray(String str)
		{
			int indexLastSpace = -1;
			int length = str.length();
			for (int i = 0; i < length; i++)
			{
				char c = str.charAt(i);
				if (c < '0' || c > '9')
				{
					if (c == ' ')
					{
						indexLastSpace = i;
					}
					else
					{
						return false;
					}
				}
				int countDigit = i - indexLastSpace;
				if ( countDigit > 3
					 || (countDigit == 3
							&& Integer.parseInt(str.substring(indexLastSpace + 1, i + 1)) > Byte.MAX_VALUE)
					)
				{
					return false;
				}
			}
			return length > 0;
		}
	}
}
//
///**
// *  整数和及其含义对应关系类
// */
//abstract class IntName
//{
//
//	int value;
//
//
//	void setValue(int value)
//	{
//		this.value = value;
//	}
//
//	abstract String stringValue();
//
//	public String toString()
//	{
//		return stringValue();
//	}
//
//	public boolean equals(Object an)
//	{
//		return (an instanceof IntName) && ((IntName)an).value == this.value;
//	}
//}

class StopBits //extends IntName
{
	int value;

	StopBits(int bits)
	{
		value = bits;
	}

	public String toString()
	{
		String ret;
		if(this.value == SerialPort.STOPBITS_1_5)
		{
			ret = "1.5";
		}
		else
		{
			ret = Integer.toString(value);
		}
		return ret;
	}

	public boolean equals(Object an)
	{
		return (an instanceof StopBits) && ((StopBits)an).value == this.value;
	}
}
//
//class DataBits extends IntName
//{
//
//	DataBits(int bits)
//	{
//		setValue(bits);
//	}
//
//	String stringValue()
//	{
//		return Integer.toString(value);
//	}
//}
//
//class Parity extends IntName
//{
//	static ResourceBundle res = JpscToolkit.getStringResourceBundle();
//
//	Parity(int intParity)
//	{
//		setValue(intParity);
//	}
//
//	String stringValue()
//	{
//		String ret;
//		switch (this.value)
//		{
//			case SerialPort.PARITY_NONE:
//				ret = res.getString("config.parity.none");
//				break;
//			case SerialPort.PARITY_ODD:
//				ret = res.getString("config.parity.odd");
//				break;
//			case SerialPort.PARITY_EVEN:
//				ret = res.getString("config.parity.even");
//				break;
//			case SerialPort.PARITY_MARK:
//				ret = res.getString("config.parity.mark");
//			case SerialPort.PARITY_SPACE:
//				ret = res.getString("config.parity.space");
//				break;
//			default:
//				ret = res.getString("config.parity.unknown");
//		}
//		return ret;
//	}
//}

⌨️ 快捷键说明

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