/** Change current currency. */ void changeCurrency(String newCurrency, boolean isChangingAllMoneyFields) { if (isChangingAllMoneyFields) { changeAllMoneyFields(newCurrency); } else { moneyField.setValue(moneyField.getValue().getConverted(newCurrency), isInitialized()); currencyLabel.setText(newCurrency); } }
/** Sets the Money value. */ public void setValue(Money money) { if (money == null) { setValue(new Money()); clearMoney(); performFlags(); return; } // Check displayed currency int newCurrency = money.getCurrency(); if (newCurrency != moneyField.getValue().getCurrency()) { currencyLabel.setText(Money.getCurrencyFor(newCurrency)); } // Set value moneyField.setValue(money); performFlags(); }
/** Initialization called by constructors. */ protected void initialize(int size) { // Check desired size if (size <= 0) { size = 7; } // Construct fields moneyField = new LimitedNumberField(size); moneyField.setHorizontalAlignment(SwingConstants.RIGHT); currencyLabel = new JLabel(); // Popup menu JPopupMenu popupMenu = new JPopupMenu(); copyItem = new JMenuItem("Copy"); copyItem.addActionListener(this); popupMenu.add(copyItem); pasteItem = new JMenuItem("Paste"); pasteItem.addActionListener(this); popupMenu.add(pasteItem); popupMenu.add(new JPopupMenu.Separator()); // Default currencies JMenuItem menuItem; defaultMenuItems = new JMenuItem[defaultCurrencies.length]; for (int i = 0; i < defaultCurrencies.length; i++) { menuItem = new CurrencyMenuItem(defaultCurrencies[i]); menuItem.addActionListener(this); popupMenu.add(menuItem); defaultMenuItems[i] = menuItem; } popupMenu.add(new JPopupMenu.Separator()); // european currencies String europeanCurrencies[] = Money.getEuropeanCurrencyList(); europeanCurrenciesMenu = new JMenu("Europe"); for (int i = 0; i < europeanCurrencies.length; i++) { menuItem = new CurrencyMenuItem(europeanCurrencies[i]); menuItem.addActionListener(this); europeanCurrenciesMenu.add(menuItem); if (i == 0) { europeanCurrenciesMenu.add(new JPopupMenu.Separator()); } } popupMenu.add(europeanCurrenciesMenu); // Calculator popupMenu.add(new JPopupMenu.Separator()); calculatorItem = new JMenuItem("Calculator"); calculatorItem.addActionListener(this); popupMenu.add(calculatorItem); // Add the popup moneyPopup = PopupAdapter.create(this.moneyField, popupMenu); KeyStroke SHIFT_F10 = KeyStroke.getKeyStroke(KeyEvent.VK_F10, InputEvent.SHIFT_MASK); moneyField.registerKeyboardAction(this, "popup", SHIFT_F10, JComponent.WHEN_FOCUSED); // Now init documents textDocument = new JTextField().getDocument(); moneyDocument = (LimitedMoneyDocument) moneyField.getDocument(); moneyDocument.addDocumentListener(this); // Layout elements setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); flagLabel = new JLabel(GUI.getMandatoryIcon()); add("West", flagLabel); add("Center", Box.createHorizontalStrut(3)); add(moneyField); add(Box.createHorizontalStrut(GUI.HorizontalLabelDistance)); add(currencyLabel); // Check mandatory and readonly state performFlags(); // Set cursor setCursor(GUI.ENTRY_CURSOR); // Finally set the initial value Money money = new Money(); moneyField.setValue(money, false); currencyLabel.setText(Money.getCurrencyFor(money.getCurrency())); guiInitialized = true; }
/** Handle string insertion. */ public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { // Store source data int sourceLength = getLength(); String sourceText = getText(0, sourceLength); StringBuffer strBuffer = new StringBuffer(sourceText); // Check if old value is zero if (offs == 0 && sourceLength > 0 && str.length() > 0) { long oldValue; try { oldValue = myFormat.parse(strBuffer.toString()).longValue(); if (oldValue == 0) { strBuffer.deleteCharAt(0); } } catch (Exception e) { } } // Now add new string strBuffer.insert(offs, str); BigDecimal value; try { value = new BigDecimal(myFormat.parse(strBuffer.toString()).doubleValue()); } catch (Exception e) { if (sourceLength > 0) { if (sourceText.startsWith(",")) { sourceText = "0" + sourceText; } value = new BigDecimal(getRealString(sourceText)); } else { value = new BigDecimal(0.0); } } // Set the new value if (textField == null) { return; } textField.setValue(new Money(value, textField.getValue().getCurrency()), false); super.remove(0, sourceLength); super.insertString(0, myFormat.format(value.doubleValue()), a); // Set caret to correct caret position if (!"".equals(sourceText)) // <=> initilized { int lengthDiff = getLength() - sourceLength; int caretPos = lengthDiff + offs; int caretDiff = sourceLength - offs; // Adjust for columns after centSperator (currently Diff < 3) if ((caretDiff > 0 && caretDiff < 3) || (value.abs().longValue() < 10 && caretPos == 0)) { caretPos += 1; } if (caretPos < 0) { caretPos = 0; } textField.setCaretPosition(caretPos); } else { textField.setCaretPosition(1); } }