📄 numberformatdemo.java
字号:
*/ public void workaroundSetText(TextComponent area, String newText) { String foo = workaround(area.getText()); if (foo.equals(newText)) return; area.setText(newText); //if (area.gotFocus()) // area.select(newText.length(),newText.length()); } /** * Update the attributes. */ public void updateAttributes() { workaroundSetText(intMin,toString(format.getMinimumIntegerDigits()) ); workaroundSetText(intMax,toString(format.getMaximumIntegerDigits()) ); workaroundSetText(decMin,toString(format.getMinimumFractionDigits()) ); workaroundSetText(decMax,toString(format.getMaximumFractionDigits()) ); workaroundSetText(negPrefix,format.getNegativePrefix() ); workaroundSetText(negSuffix,format.getNegativeSuffix() ); workaroundSetText(posPrefix,format.getPositivePrefix() ); workaroundSetText(posSuffix,format.getPositiveSuffix() ); } /** * Get the default number formatter. */ public void clickedGetDefault() { setFormatFromLocale(); } /** * Update the number formatter with currency attribute. */ public void clickedGetCurrency() { setFormatFromLocale(); } /** * Update the number formatter with percentage attribute. */ public void clickedGetPercent() { setFormatFromLocale(); } /** * Update the number formatter when a new locale is selected. */ public void selectedLocaleMenu() { setFormatFromLocale(); } /** * If the user changes the input number, format it immediately */ public void inputChanged() { clickedRightButton(); } /** * If the user changes the output number, format it immediately */ public void outputChanged() { clickedLeftButton(); } /** * Update the text in the input area to use the new number format. */ public void clickedRightButton() { String leftString = workaround(inputText.getText()); Number num; try { num = new Double(leftString); } catch (IllegalArgumentException e) { outputText.setText(""); inputText.selectAll(); return; } workaroundSetText(outputText,format.format(num)); } /** * Update the text in the output area to use the new number format. */ public void clickedLeftButton() { String rightString = workaround(outputText.getText()); Number num; ParsePosition status = new ParsePosition(1); try { num = format.parse(rightString, status); } catch (IllegalArgumentException e) { errorText("Exception: " + e.getClass() + e.getMessage()); inputText.setText(""); outputText.selectAll(); return; } if (status.getIndex() != rightString.length()) { errorText("excess text: " + rightString.substring(status.getIndex(), rightString.length())); } workaroundSetText(inputText, num.toString() ); } /** * When the user changes the field containing the pattern, a new format * needs to be constructed from the pattern, then redisplay everything. */ public void patternChanged() { String foo = workaround(patternText.getText()); try { if (isLocalized) { format.applyLocalizedPattern(foo); errorText("Pattern: " + foo + " -> " + format.toLocalizedPattern()); } else { format.applyPattern(foo); errorText("Pattern: " + foo + " -> " + format.toPattern()); } } catch (Exception bar) { errorText("Exception: " + bar.getClass() + bar.getMessage()); } updateAttributes(); clickedRightButton(); } //------------------------------------------------------------ // package private //------------------------------------------------------------ void addWithFont(Container container, Component foo, Font font) { if (font != null) foo.setFont(font); container.add(foo); } //{{DECLARE_CONTROLS Panel localePanel; CheckboxGroup group1; Label label1; Label label2; Label label3; Choice localeMenu; Label localeLabel; TextField inputText; TextField outputText; //Button rightButton; //Button leftButton; TextField patternText; Label label4; TextField negPrefix; TextField negSuffix; TextField posPrefix; TextField posSuffix; Label label5; Label label6; Label label7; Label label8; TextField intMin; TextField intMax; TextField decMin; TextField decMax; Label label9; Label label10; Label label11; Label label12; Checkbox getInstance; Checkbox getCurrency; Checkbox getPercent; Checkbox getLocalized; Label label13; Label label14; //}} //------------------------------------------------------------ // private //------------------------------------------------------------ private void buildGUI() { //{{INIT_CONTROLS setBackground(Color.white); // MD 8/7 // shouldn't be necessary, but it is! setLayout(new FlowLayout(FlowLayout.CENTER,2,2)); // INPUT/OUTPUT/PATTERN Panel creditPanel = new Panel(); label1=new Label("Decimal Number Formatting Demo", Label.CENTER); label1.setFont(Utility.titleFont); creditPanel.add(label1); label13=new Label(creditString, Label.CENTER); label13.setFont(Utility.creditFont); creditPanel.add(label13); Utility.fixGrid(creditPanel,1); add(creditPanel); // IO Panel ioPanel = new Panel(); label3=new Label("New Number", Label.RIGHT); label3.setFont(Utility.labelFont); ioPanel.add(label3); outputText=new TextField(FIELD_COLUMNS); outputText.setFont(Utility.editFont); ioPanel.add(outputText); /*Panel gap1 = new Panel(); gap1.setLayout(null); gap1.resize(5,5); gap1.add(outputText); Panel gap2 = new Panel(); gap2.setLayout(null); gap2.resize(5,5); gap2.add(outputText); */ label2=new Label("Java 1.0 Number", Label.RIGHT); label2.setFont(Utility.labelFont); ioPanel.add(label2); inputText=new TextField(FIELD_COLUMNS); inputText.addKeyListener(this); inputText.setFont(Utility.editFont); ioPanel.add(inputText); label4=new Label("Pattern", Label.RIGHT); label4.setFont(Utility.labelFont); ioPanel.add(label4); patternText=new TextField(FIELD_COLUMNS); patternText.addKeyListener(this); patternText.setFont(Utility.editFont); ioPanel.add(patternText); ioPanel.add(new Label(" ")); getLocalized=new Checkbox("Localized Pattern"); getLocalized.addItemListener(this); getLocalized.setFont(Utility.labelFont); ioPanel.add(getLocalized); Utility.fixGrid(ioPanel,2); add(ioPanel); // LOCALE localePanel=new Panel(); localeLabel=new Label("Locale:"); localeLabel.setFont(Utility.labelFont); localePanel.add("loc",localeLabel); localeMenu= new Choice(); localeMenu.addItemListener(this); localeMenu.setFont(Utility.choiceFont); localePanel.add(localeMenu); // FORMAT CHECKS group1= new CheckboxGroup(); getInstance=new Checkbox("Default Format",group1, false); getInstance.addItemListener(this); getInstance.setFont(Utility.labelFont); localePanel.add(getInstance); getCurrency=new Checkbox("Currency Format",group1, true); getCurrency.addItemListener(this); getCurrency.setFont(Utility.labelFont); localePanel.add(getCurrency); getPercent=new Checkbox("Percent Format",group1, false); getPercent.addItemListener(this); getPercent.setFont(Utility.labelFont); localePanel.add(getPercent); Utility.fixGrid(localePanel,1); Panel bottomPanel = new Panel(); bottomPanel.add(localePanel); BorderPanel x = new BorderPanel(); x.setBackground(Color.lightGray); x.setLayout(null); x.setSize(8,130); bottomPanel.add(x); // PARAMETERS Panel parameterPanel = new Panel(); parameterPanel.add(new Label(" ")); label11=new Label("Min", Label.CENTER); label11.setFont(Utility.labelFont); parameterPanel.add(label11); label12=new Label("Max", Label.CENTER); label12.setFont(Utility.labelFont); parameterPanel.add(label12); label9=new Label("Integers", Label.RIGHT); label9.setFont(Utility.labelFont); parameterPanel.add(label9); intMin=new TextField(4); intMin.addKeyListener(this); intMin.setFont(Utility.editFont); parameterPanel.add(intMin); intMax=new TextField(4); intMax.addKeyListener(this); intMax.setFont(Utility.editFont); parameterPanel.add(intMax); label10=new Label("Decimals", Label.RIGHT); label10.setFont(Utility.labelFont); parameterPanel.add(label10); decMin=new TextField(4); decMin.addKeyListener(this); decMin.setFont(Utility.editFont); parameterPanel.add(decMin); decMax=new TextField(4); decMax.addKeyListener(this); decMax.setFont(Utility.editFont); parameterPanel.add(decMax); parameterPanel.add(new Label(" ")); label7=new Label("Prefix", Label.CENTER); label7.setFont(Utility.labelFont); parameterPanel.add(label7); label8=new Label("Suffix", Label.CENTER); label8.setFont(Utility.labelFont); parameterPanel.add(label8); label6=new Label("Positive", Label.RIGHT); label6.setFont(Utility.labelFont); parameterPanel.add(label6); posPrefix=new TextField(4); posPrefix.addKeyListener(this); posPrefix.setFont(Utility.editFont); parameterPanel.add(posPrefix); posSuffix=new TextField(4); posSuffix.addKeyListener(this); posSuffix.setFont(Utility.editFont); parameterPanel.add(posSuffix); label5=new Label("Negative", Label.RIGHT); label5.setFont(Utility.labelFont); parameterPanel.add(label5); negPrefix=new TextField(4); negPrefix.addKeyListener(this); negPrefix.setFont(Utility.editFont); parameterPanel.add(negPrefix); negSuffix=new TextField(4); negSuffix.addKeyListener(this); negSuffix.setFont(Utility.editFont); parameterPanel.add(negSuffix); Utility.fixGrid(parameterPanel,3); bottomPanel.add(parameterPanel); Utility.fixGrid(bottomPanel,3); Utility.setInsets(bottomPanel,x,new Insets(20,20,2,2)); add(bottomPanel); Panel copyrightPanel = new Panel(); addWithFont (copyrightPanel,new Label(copyrightString, Label.LEFT), Utility.creditFont); addWithFont (copyrightPanel,new Label(copyrightString2, Label.LEFT), Utility.creditFont); Utility.fixGrid(copyrightPanel,1); add(copyrightPanel); } private String toString( int anInt ) { Integer intObj = new Integer(anInt); return intObj.toString(); } private int parseIntField(TextComponent text) { int result = 0; try { Integer value = new Integer(workaround(text.getText())); result = value.intValue(); } catch (NumberFormatException e) { } return result; } private void intMinChanged() { format.setMinimumIntegerDigits(parseIntField(intMin)); updateAttributes(); handleAttributeChange(); } private void intMaxChanged() { format.setMaximumIntegerDigits(parseIntField(intMax)); updateAttributes(); handleAttributeChange(); } private void decMinChanged() { format.setMinimumFractionDigits(parseIntField(decMin)); updateAttributes(); handleAttributeChange(); } private void decMaxChanged() { format.setMaximumFractionDigits(parseIntField(decMax)); updateAttributes(); handleAttributeChange(); } private void negPrefixChanged() { format.setNegativePrefix(workaround(negPrefix.getText())); updateAttributes(); handleAttributeChange(); } private void negSuffixChanged() { format.setNegativeSuffix(workaround(negSuffix.getText())); updateAttributes(); handleAttributeChange(); } private void posPrefixChanged() { format.setPositivePrefix(workaround(posPrefix.getText())); updateAttributes(); handleAttributeChange(); } private void posSuffixChanged() { format.setPositiveSuffix(workaround(posSuffix.getText())); updateAttributes(); handleAttributeChange(); } /** * Strips high bits, because of bug in Java */ private static String workaround(String source) { StringBuffer result = new StringBuffer(); for (int i = 0; i < source.length(); ++i) result.append((char)(source.charAt(i) & 0xFF)); return result.toString(); } private void errorText(String s) { if (DEBUG) { System.out.println(s); } } private static final String creditString = "v1.1a6, Demo:"; private static final String copyrightString = ""; private static final String copyrightString2 = ""; private static final int FIELD_COLUMNS = 35; private static final boolean DEBUG = false; private static boolean isLocalized = false; // private Choice formatter, locale; private DecimalFormat format; private Locale[] locales; private DemoApplet applet;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -