📄 configurepane.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 + -