📄 jpsctoolkit.java
字号:
package com.zcsoft.jpsc.gui;
import java.util.*;
import javax.swing.*;
import com.zcsoft.swing.ComboItem;
/**
* <p>Title: 串口通信</p>
* <p>Description: 串口通信实验</p>
* <p>Copyright: Copyright (c) 2004-2005</p>
* <p>Company: Zhicheng Software&Service Co. Ltd.</p>
* @author 蒋智湘
* @version 1.0
*/
/** 工具箱 */
public class JpscToolkit
{
static ResourceBundle res = ResourceBundle.getBundle("com.zcsoft.jpsc.resource.Res");
private JpscToolkit(){}
public static JComboBox createFormatCompnent()
{
return new JComboBox(new Object[]{
new ComboItem(new Integer(16), res.getString("format.hex")),
new ComboItem(new Integer(Character.MIN_RADIX - 1), res.getString("format.character")),
new ComboItem(new Integer(10), res.getString("format.decimal"))});
}
private static boolean isCharFormat(int radix)
{
return radix < Character.MIN_RADIX;
}
/**
* 获取电报数据格式下拉框中当前选择格式对应的进制。
* @param formatCombox 提供给用户选择的数据格式
*/
public static int getRadixForSelectedFormat(JComboBox formatCombox)
{
return getRadixForItem(formatCombox.getSelectedItem());
}
/**
* 获取电报数据格式下拉框中指定选择项对应的进制。
* @param formatItem 提供给用户选择的数据格式中某一个
*/
public static int getRadixForItem(Object formatItem)
{
return ((Integer)((ComboItem)formatItem).getId()).intValue();
}
/**
* 将用户输入的电报按照指定数据格式转换成数字
* @param telegram 电报字节的字符串表示
* @param radix 上述字符串表示所采用的进制
* @return 电报内容的原始字节
*/
public static byte[] byteArrayOfTelegram(String telegram, int radix) throws NumberFormatException
{
if (isCharFormat(radix))
{
return telegram.getBytes();
}
return byteArrayOfString(telegram, radix);
}
/**
* 指定数据格式下,电报内容的字节个数
* @param telegram 电报内容的字符串表示
* @param radix 字符串表示所使用的数据格式
* @return 电报原始字节的长度
*/
public static int telegramLength(String telegram, Object format)
{
if (isCharFormat(JpscToolkit.getRadixForItem(format)))
{
return telegram.length();
}
else
{
return new StringTokenizer(telegram).countTokens();
}
}
/**
* 将以空格分隔的多个字节值构建成一个自己数组。
* @param s 包含多个字节值的字符串。
* @param radix 表示这些字节值的字符串所使用的进制(>2)。
* @return
* @throws NumberFormatException 空格分隔的字符串记号不可以按指定进制转换成字节值
*/
private static byte[] byteArrayOfString(String s, int radix) throws NumberFormatException
{
StringTokenizer st = new StringTokenizer(s);
byte[] terminalBytes = new byte[st.countTokens()];
int i = 0;
while (st.hasMoreTokens())
{
terminalBytes[i ++] = Byte.parseByte(st.nextToken(), radix);
}
return terminalBytes;
}
/**
* 用限定的进制表示规定区域内的字节值,并将这些字节封装成字符串后返回
* @param message 包含了待转换字节值的字节数组
* @param offset 待转换的字节从此位置开始
* @param length 从offset开始,length字节需要转换
* @param radix 各个字节的值表示成该进制下的字符串
* @return
*/
public static String toString(byte[] message, int offset, int length, int radix)
{
if (isCharFormat(radix))
{
return new String(message, offset, length);
}
StringBuffer returnedString = new StringBuffer(length * 3);
for (int n = offset + length; offset < n; offset++)
{
returnedString.append(Integer.toString(message[offset], radix));
returnedString.append(' ');
}
return returnedString.toString();
}
/**
* 创建一个JLabel组件,并设定给组件显示的助记符,同时设定它为指定的组件提供焦点获取服务
* @param labelTextKey JLabel组件的文本在资源中
* @param c 待创建组件提供组件c的焦点获取服务
* @return
*/
public static JLabel createLabelForComp(String labelTextKey, java.awt.Component c)
{
String caption = res.getString(labelTextKey);
int[] mnemonic = new int[1];
JLabel lbl = new JLabel(com.zcsoft.swing.ZCAction.getNameFrom(caption, mnemonic));
lbl.setDisplayedMnemonic(mnemonic[0]);
lbl.setLabelFor(c);
return lbl;
}
/**
* 根据按钮文本对应的资源键,设置按钮文本和助记符
* @param cmd 按钮实例
* @param captionKey 资源文件中按钮上文本对应的查找键
*/
public static void setCommandPropterties(AbstractButton cmd, String captionKey)
{
String caption = res.getString(captionKey + ".caption");
int[] mnemonic = new int[1];
cmd.setText(com.zcsoft.swing.ZCAction.getNameFrom(caption, mnemonic));
cmd.setMnemonic(mnemonic[0]);
}
/**
* 显示消息对话框
* @param parent
* @param message
*/
public static void showMessageDialog(java.awt.Component parent, Object message)
{
JOptionPane.showMessageDialog(parent,
message,
res.getString("message.dialog.title"),
JOptionPane.INFORMATION_MESSAGE);
}
/** 获取字符串映射资源表 */
public static ResourceBundle getStringResourceBundle()
{
return res;
}
/**
* 将x,y,width,height字符串封装成Rectangle对象后返回
* @param xywh 有逗号分隔的,依次表示Rectangle实例的x、y、width和height属性值的字符串。
* x、y、width、height各值都是整数
* @return Rectangle实例。如果xywh为null,或者示其它非法格式的
*/
public static java.awt.Rectangle rectValue(String xywh)
{
java.awt.Rectangle rect = null;
if (xywh == null)
{
return rect;
}
StringTokenizer st = new StringTokenizer(xywh, ", ");
if (st.countTokens() == 4)
{
rect = new java.awt.Rectangle();
try
{
rect.x = Integer.parseInt(st.nextToken());
rect.y = Integer.parseInt(st.nextToken());
rect.width = Integer.parseInt(st.nextToken());
rect.height = Integer.parseInt(st.nextToken());
}
catch (NumberFormatException ex)
{
return null;
}
}
return rect;
}
/**
* 将Rectangle实例的各个属性值转换成字符串表示
* @param rect Rectangle实例
* @return 如果rect为null,则返回null,
* 否则返回rect.x + "," + rect.y + "," + rect.width + "," + rect.height。
*/
public static String stringValue(java.awt.Rectangle rect)
{
if (rect == null)
{
return null;
}
return rect.x + "," + rect.y + "," + rect.width + "," + rect.height;
}
/**
* 判定指定的字符串是否为真值
* 参考Boolean.valueOf(String)实现
*/
public static boolean booleanValue(String s)
{
return Boolean.valueOf(s).booleanValue();
}
/**
* 将布尔值转换成人性化的字符串
* 参考Boolean.toString()实现
*/
public static String stringValue(boolean b)
{
return (b?Boolean.TRUE:Boolean.FALSE).toString();
}
public static String getFormatedString(String key, Object arg)
{
String value = res.getString(key);
Object[] args = arg instanceof Object[]?(Object[])arg:new Object[]{arg};
Object nonNullArgs[] = args;
for (int i=0; i<args.length; i++)
{
if (args[i] == null)
{
if (nonNullArgs==args)
nonNullArgs=(Object[])args.clone();
nonNullArgs[i] = "null";
}
}
return java.text.MessageFormat.format(value, nonNullArgs);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -