package bs.util.tool.commongui.plugins.more; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JComboBox; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import bs.util.tool.commongui.GuiJPanel; import bs.util.tool.commongui.GuiUtils; import bs.util.tool.commongui.utils.EscapeUtils; import bs.util.tool.commongui.utils.LanguageUtils; /** * 字符转义工具. */ public class EscapeCharacterTool extends GuiJPanel { private static final long serialVersionUID = 1L; /** * 字符文本域. */ private JTextArea unescapeTextArea = createJTextArea(GuiUtils.font14_un); /** * 转义文本域. */ private JTextArea escapeTextArea = createJTextArea(GuiUtils.font14_un); /** * 帮助文本域. */ private JTextArea helpTextArea = createJTextArea(GuiUtils.font14_un); /** * 字符类型. */ private String[] characterTypes = new String[] { LanguageUtils.CONST_HTML, LanguageUtils.CONST_XML, LanguageUtils.CONST_JAVA, LanguageUtils.CONST_JavaScript, LanguageUtils.CONST_CSV }; /** * 字符类型. */ private String curCharacterType = characterTypes[0]; /** * HTML转义说明. */ private static final String ESCAPE_HELP_HTML = "HTML See: http://www.w3.org/TR/html4/sgml/entities.html" + "\n" + "\n < > & \" no-break space em space en space ® © ™" + "\n< > & "       ® © ™"; /** * XML转义说明. */ private static final String ESCAPE_HELP_XML = "XML See: http://www.xmlnews.org/docs/xml-basics.html" + "\n" + "\n < > & \" '" + "\n< > & " '"; /** * JAVA转义说明. */ private static final String ESCAPE_HELP_JAVA = "JAVA See: http://docs.oracle.com/javase/tutorial/java/data/characters.html" + "\n" + "\n回车符 换行符 制表符 单引号 双引号 反斜杠 退格符 换页符" + "\n \\r \\n \\t \\' \\\" \\\\ \\b \\f"; /** * JavaScript转义说明. */ private static final String ESCAPE_HELP_JavaScript = "JavaScript See: http://www.w3schools.com/js/js_strings.asp" + "\n" + "\n回车符 换行符 制表符 单引号 双引号 反斜杠 退格符 换页符" + "\n \\r \\n \\t \\' \\\" \\\\ \\b \\f"; /** * CSV转义说明. */ private static final String ESCAPE_HELP_CSV = ""; public EscapeCharacterTool() { // 边界布局 setLayout(new BorderLayout()); // Center,字符及转义结果输入输出域,使用3行1列的Grid布局,使其平均显示 JPanel textAreaPanel = new JPanel(new GridLayout(3, 1)); add(textAreaPanel, BorderLayout.CENTER); JPanel scriptPanel = new JPanel(new BorderLayout()); addJLabel(scriptPanel, " 原 字 符: ", GuiUtils.font14b_cn, BorderLayout.WEST); scriptPanel.add(new JScrollPane(unescapeTextArea), BorderLayout.CENTER); textAreaPanel.add(scriptPanel); JPanel resultPanel = new JPanel(new BorderLayout()); addJLabel(resultPanel, " 转义字符: ", GuiUtils.font14b_cn, BorderLayout.WEST); resultPanel.add(new JScrollPane(escapeTextArea), BorderLayout.CENTER); textAreaPanel.add(resultPanel); JPanel helpTextPanel = new JPanel(new BorderLayout()); addJLabel(helpTextPanel, " 常用转义: ", GuiUtils.font14b_cn, BorderLayout.WEST); helpTextPanel.add(new JScrollPane(helpTextArea), BorderLayout.CENTER); textAreaPanel.add(helpTextPanel); setHelpTextArea(); // East,操作区域,使用BorderLayout布局 JPanel actionPanel = new JPanel(new BorderLayout()); add(actionPanel, BorderLayout.EAST); // 帮助面板 JPanel helpPanel = new JPanel(new BorderLayout()); JPanel helpButtonPanel = new JPanel(new BorderLayout()); helpPanel.add(helpButtonPanel, BorderLayout.EAST); addJButton(helpButtonPanel, "帮助", "", GuiUtils.font13_cn, new ActionListener() { @Override public void actionPerformed(ActionEvent event) { showTextAreaMessage("常用转义字符" + "\n\n" + ESCAPE_HELP_HTML + "\n\n\n" + ESCAPE_HELP_XML + "\n\n\n" + ESCAPE_HELP_JAVA + "\n\n\n" + ESCAPE_HELP_JavaScript + "\n\n\n" + ESCAPE_HELP_CSV, "帮助", JOptionPane.INFORMATION_MESSAGE, null, null); } }); actionPanel.add(helpPanel, BorderLayout.NORTH); // 填充 actionPanel.add(new JPanel(), BorderLayout.CENTER); // 放置按钮 JPanel buttonPanel = new JPanel(new GridLayout(9, 1)); actionPanel.add(buttonPanel, BorderLayout.SOUTH); addJComboBox(buttonPanel, characterTypes, GuiUtils.font13, new ActionListener() { public void actionPerformed(ActionEvent event) { curCharacterType = ((JComboBox) event.getSource()).getSelectedItem().toString(); setHelpTextArea(); } }); buttonPanel.add(new JPanel()); // 仅做填充 // 转换 addJButton(buttonPanel, " 转换 ", "", GuiUtils.font14b_cn, new MouseListener() { public void mouseReleased(MouseEvent event) { String input = unescapeTextArea.getText(); escapeTextArea.append(EscapeUtils.escape(input, curCharacterType)); } public void mousePressed(MouseEvent e) { escapeTextArea.setText(""); } public void mouseExited(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } }); buttonPanel.add(new JPanel()); // 仅做填充 // 还原 addJButton(buttonPanel, " 还原 ", "", GuiUtils.font14b_cn, new MouseListener() { public void mouseReleased(MouseEvent event) { String input = escapeTextArea.getText(); unescapeTextArea.append(EscapeUtils.unescape(input, curCharacterType)); } public void mousePressed(MouseEvent e) { unescapeTextArea.setText(""); } public void mouseExited(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } }); buttonPanel.add(new JPanel()); // 仅做填充 // 全部清空 addJButton(buttonPanel, " 全部清空 ", "", GuiUtils.font14_cn, new ActionListener() { public void actionPerformed(ActionEvent event) { unescapeTextArea.setText(""); escapeTextArea.setText(""); } }); } /** * 设置帮助文本域显示文字. */ private void setHelpTextArea() { if (curCharacterType.equals(LanguageUtils.CONST_HTML)) { helpTextArea.setText(ESCAPE_HELP_HTML); } else if (curCharacterType.equals(LanguageUtils.CONST_XML)) { helpTextArea.setText(ESCAPE_HELP_XML); } else if (curCharacterType.equals(LanguageUtils.CONST_JAVA)) { helpTextArea.setText(ESCAPE_HELP_JAVA); } else if (curCharacterType.equals(LanguageUtils.CONST_JavaScript)) { helpTextArea.setText(ESCAPE_HELP_JavaScript); } else if (curCharacterType.equals(LanguageUtils.CONST_CSV)) { helpTextArea.setText(ESCAPE_HELP_CSV); } } }