📄 collatedemo.java
字号:
// TEXT textentry.addKeyListener(this); textentry.setFont(editFont); textentry.setText("black-birds\nPat\np\u00E9ch\u00E9\np\u00EAche\n" + "p\u00E9cher\np\u00EAcher\nTod\nT\u00F6ne\nTofu\nblackbirds\n" + "Ton\nPAT\nblackbird\nblack-bird\npat\n"); //RULE ENTRY AREA Panel ruleEntryPanel = new Panel(); Panel rulePanel = new Panel(); if (theCollation instanceof RuleBasedCollator) { String ruleText = ((RuleBasedCollator)theCollation).getRules(); ruleEntry.setFont(ruleFont); ruleEntry.setText(createUnicodeString(ruleText)); } ruleEntryPanel.add(new Label("Collator Rules", Label.LEFT)); ruleEntryPanel.add(ruleEntry); collateRulesButton = new Button("Set Rules"); collateRulesButton.addActionListener(this); collationName = new TextField(10); collationName.setText("custom-" + untitledIndex); ruleEntryPanel.add(collateRulesButton); ruleEntryPanel.add(new Label("Collator Name", Label.LEFT)); ruleEntryPanel.add(collationName); Utility.fixGrid(ruleEntryPanel,1); // PUT ALL TOGETHER Panel centerPanel = new Panel(); centerPanel.add(textentry); centerPanel.add(topPanel); centerPanel.add(ruleEntryPanel); errorMsg.setFont(Utility.labelFont); centerPanel.add(errorMsg); Utility.fixGrid(centerPanel,3); add("Center", centerPanel); Panel bottomPanel = new Panel(); bottomPanel.setLayout(new GridLayout(2,1,0,0)); addWithFont (bottomPanel, new Label(copyrightString, Label.LEFT), Utility.creditFont); addWithFont (bottomPanel, new Label(copyrightString2, Label.LEFT), Utility.creditFont); Utility.fixGrid(bottomPanel,1); add("South", bottomPanel); } //------------------------------------------------------------ // private //------------------------------------------------------------ /** * This function is called by handleSortAscend and handleSortDescend * to seperate each line of the textArea into individual strings, * and add them to the vector to be sorted. */ private void InitializeListVector() { textList.removeAllElements(); String composite = textentry.getText(); char compositeArray[] = composite.toCharArray(); for (int i = 0; i < compositeArray.length; i++) { compositeArray[i] = (char) (compositeArray[i] & 0xFF); } composite = new String(compositeArray); String substr; int startOffset = 0; int endOffset = 0; for (; endOffset < composite.length(); endOffset++) { char ch = composite.charAt(endOffset); if (ch == '\n' || ch == '\r') { if (endOffset > startOffset) { substr = composite.substring(startOffset, endOffset); textList.addElement(substr); } startOffset = endOffset + 1; } } if (startOffset < composite.length()) { substr = composite.substring(startOffset, composite.length()); textList.addElement(substr); } } /** * This function is called by handleSortAscend and handleSortDescend * to reset the text area based on the sort results stored as a vector * of substrings. */ private void resetTextArea() { String composite = new String(); int i = 0; for (; i < textList.size() - 1; i++) { composite = composite.concat((String) textList.elementAt(i)); composite = composite.concat("\n"); } //don't add the \n to the end composite = composite.concat((String) textList.elementAt(i)); textentry.setText(composite); textList.removeAllElements(); } private void errorText(String s) { if (!s.equals(errorMsg.getText())) { errorMsg.setText(s); errorMsg.setSize(300, 50); } } private static StringBuffer oneChar = new StringBuffer(7); private String makeDisplayString(char ch) { oneChar.setLength(0); if (ch < 0x0020 || (ch > 0x007D && ch < 0x00A0) || ch > 0x00FF) { String temp = Integer.toString((int)ch,16).toUpperCase(); oneChar.append(temp); if (temp.length() < 4) oneChar.append(zeros.substring(0,4-temp.length())); } else { oneChar.append(ch); } return oneChar.toString(); } /** Changes a string into a representation that can be pasted into a program. Uses \ t, \ uxxxx, etc. to display characters outside of Latin1. Others are themselves. */ private String createUnicodeString(String source) { StringBuffer result = new StringBuffer(source.length()); int len = 0; int i = 0; while (i < source.length()) { char ch = source.charAt(i); switch(ch) { case '\'': int mytemp = i; int n = 0; result.append(ch); ch = source.charAt(++i); while((ch != '\'') && (i < source.length() -1)) { String inquote = makeDisplayString(ch); n++; i++; if (inquote.length() > 1) { result.append("\\u"); result.append(inquote); len += 6; } else { result.append(inquote); len++; } ch = source.charAt(i); } if (n == 0) { result.append('\''); n++; i++; ch = source.charAt(i); } result.append(ch); len += n; break; case ';': case '=': if (len > 15) { result.append('\n'); len = 0; } result.append(' '); result.append(ch); len += 2; break; case ',': result.append(' '); result.append(ch); len += 2; break; case '<': case '&': result.append('\n'); result.append(ch); result.append(' '); len = 0; len += 2; break; case '\n': break; default: String dspString = makeDisplayString(ch); if (dspString.length() > 1) { result.append("\\u"); result.append(dspString); len += 6; } else { result.append(dspString); len++; } break; } i++; } return result.toString(); } private static final String zeros = "0000"; private String convertStringToRules(String source) { StringBuffer result = new StringBuffer(source.length()); for (int i = 0; i < source.length(); ++i) { //hack around TextArea bug char ch = (char) (source.charAt(i) & 0xFF); switch(ch) { case '\n': break; case '\'': if ((i+6 < source.length()) && (source.charAt(i+2) == 'u')) { String temp = source.substring(i+3,i+7); if (temp.equals("005c")) { //have to handle backslash differently since //it is a special character in Java result.append("'\\u005c'"); } else result.append((char)(Integer.parseInt(temp,16))); i = i + 7; } else result.append(ch); break; case '\\': if ( (i+5 < source.length()) && (source.charAt(i+1) == 'u') ) { String temp = source.substring(i+2,i+6); result.append((char)(Integer.parseInt(temp,16))); i = i + 6; } else result.append(ch); break; default: result.append(ch); break; } } return result.toString(); } private static final String creditString = "v1.1a7, Demo"; private static final String copyrightString = ""; private static final String copyrightString2 = ""; // HSYS : fix private static int MAX_COLLATIONS = 12; private int untitledIndex = 1; private static final int FIELD_COLUMNS = 45; private static final Font editFont = new Font("TimesRoman",Font.PLAIN,18); private static final Font ruleFont = new Font("TimesRoman",Font.BOLD,14); private static final boolean DEBUG = false; private TextArea textentry = new TextArea(10, 10); private TextArea ruleEntry = new TextArea(10, 20); private Vector textList = new Vector(15, 10); private Choice localeChoice; private static final String no_decomposition = "None"; private static final String canonical_decomposition = "Canonical"; private static final String full_decomposition = "Full"; private Choice decompChoice; private static final String tertiary = "Tertiary - a vs. A"; private static final String secondary = "Secondary - a vs. \u00E0"; private static final String primary = "Primary - a vs. b"; private Choice strengthChoice; private Locale theLocale = null; private Collator theCollation = null; private Locale[] locales; private Collator[] collations; private String[] ruleStrings; private Label errorMsg = new Label("", Label.LEFT); CheckboxGroup checkboxes; Checkbox sortAscending; Checkbox sortDescending; Checkbox noSort; Button collateRulesButton; TextField collationName; private DemoApplet applet;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -