package org.fanhongtao.tools.misc; import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; public class UnicodeViewer { /** * @param args */ public static void main(String[] args) { UnicodeFrame frame = new UnicodeFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class UnicodeFrame extends JFrame { /** * */ private static final long serialVersionUID = 1L; private static final int DEFAULT_WIDTH = 400; private static final int DEFAULT_HEIGHT = 400; private static final String CRLF = System.getProperty("line.separator"); private JTextArea textArea = null; private JTextArea detailArea = null; public UnicodeFrame() { setTitle("Unicode Viewer"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); Container panel = getContentPane(); panel.setLayout(new BorderLayout()); panel.add(getTextPanel(), BorderLayout.CENTER); panel.add(getButtonPanel(), BorderLayout.SOUTH); } private JPanel getTextPanel() { JPanel parent = new JPanel(); parent.setLayout(new GridLayout(0, 1)); JPanel textPanel = new JPanel(); parent.add(textPanel); textPanel.setLayout(new BorderLayout()); JLabel label = new JLabel(); textPanel.add(label, BorderLayout.NORTH); label.setText("待编/解码字符"); JScrollPane panel = new JScrollPane(); textPanel.add(panel); textArea = new JTextArea(); textArea.setToolTipText("输入需要编/解码的字符串"); panel.add(textArea); panel.setViewportView(textArea); JPanel detailPanel = new JPanel(); parent.add(detailPanel); detailPanel.setLayout(new BorderLayout()); label = new JLabel(); detailPanel.add(label, BorderLayout.NORTH); label.setText("Detail"); panel = new JScrollPane(); detailPanel.add(panel); detailArea = new JTextArea(); detailArea.setEditable(false); detailArea.setToolTipText("只读文本框,用于显示编/解码后的结果"); panel.add(detailArea); panel.setViewportView(detailArea); return parent; } private JPanel getButtonPanel() { JPanel panel = new JPanel(); JButton button = new JButton("编码"); panel.add(button); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { encode(); } }); button = new JButton("解码"); panel.add(button); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { decode(); } }); return panel; } private void encode() { String fixSring[] = { "", "000", "00", "0" }; char inputChars[] = textArea.getText().toCharArray(); StringBuffer sb = new StringBuffer(); StringBuffer detailSb = new StringBuffer(); for (int i = 0; i < inputChars.length; i++) { char ch = inputChars[i]; int intValue = (int) ch; String charStr = Integer.toHexString(intValue); detailSb.append(inputChars[i]); detailSb.append('\t'); if (charStr.length() < 4) { sb.append(fixSring[charStr.length()]); detailSb.append(fixSring[charStr.length()]); } sb.append(charStr); detailSb.append(charStr); detailSb.append(CRLF); } textArea.setText(sb.toString()); detailArea.setText(detailSb.toString()); } private void decode() { String input = textArea.getText(); StringBuffer sb = new StringBuffer(); StringBuffer detailSb = new StringBuffer(); for (int i = 0; i < input.length(); i = i + 4) { String charStr = input.substring(i, i + 4); int intValue = Integer.parseInt(charStr, 16); char ch = (char) intValue; sb.append(ch); detailSb.append(ch); detailSb.append('\t'); detailSb.append(charStr); detailSb.append(CRLF); } textArea.setText(sb.toString()); detailArea.setText(detailSb.toString()); } }