मुख्य सामग्री पर जाएँ
CrossFly 100% ओपन सोर्सGitHub पर फ़ॉलो करें
CrossFlyCrossFly
शुरू करें

यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।

करेंसी फ़ील्ड कैसे बनाएँ

उद्देश्य. एक ऐसा फ़ील्ड बनाना जो मौद्रिक मानों को दाएँ से बाएँ फ़ॉर्मैट करे (उपयोगकर्ता 12345 टाइप करता है और 123,45 देखता है), locale के अनुसार हज़ार के समूहन और दशमलव स्थानों के साथ, और गणना के लिए मान को दशमलव संख्या के रूप में प्राप्त करना।

उपयोग की गई APIs

  • campo.setMode(EditMode.CURRENCY, true) — maskedEdit के साथ करेंसी मोड चालू करता है। स्वचालित रूप से निकालता है: validChars = "0123456789.+-", textAlignment = END (दाएँ संरेखित), keyboard = CALCULATOR और, यदि कोई मास्क न हो, mask = TextField.getDefaultCurrencyMask(decimalPlaces)।
  • campo.<TextFieldStyle>getStyle().decimalPlaces(2) — दशमलव स्थानों की संख्या (डिफ़ॉल्ट 2)। setMode से पहले परिभाषित करें, क्योंकि डिफ़ॉल्ट मास्क इससे बनता है।
  • TextField.getDefaultCurrencyMask(int decimalPlaces) — LocaleFormats.thousandsSeparator और LocaleFormats.decimalSeparator का उपयोग करके डिफ़ॉल्ट मास्क बनाता है (उदा.: pt-BR में 999.999.999,99)।
  • TextField.getText() — प्रदर्शन के लिए फ़ॉर्मैटेड मान ("1.234,56")।
  • TextField.getTextWithoutMask() — दशमलव बिंदु वाला मान, Double.parseDouble के लिए तैयार ("1234.56")। ऋणात्मक चिह्न का सम्मान करता है।

ऋणात्मक चिह्न: मास्क वाले करेंसी मोड में, - या + टाइप करने से बिना कोई वर्ण डाले चिह्न टॉगल होता है (handleCharInput)। ऋणात्मक getTextWithoutMask() में उपसर्ग - के रूप में दिखता है।

विभाजक LocaleFormats के माध्यम से locale से आते हैं (आरंभीकरण पर भरे जाते हैं)। कोड में ,/. को स्थिर न करें — क्षेत्र का सम्मान करने के लिए getDefaultCurrencyMask या setMode(CURRENCY, true) का उपयोग करें।

पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)

package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.style.*;   // TextFieldStyle (style में config)

/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      TextField valor = new TextField("");
      valor.caption("Valor");
      valor.<TextFieldStyle>getStyle().decimalPlaces(2); // setMode से पहले सेट करें
      valor.setMode(EditMode.CURRENCY, true);            // मुद्रा + मास्क + कैलकुलेटर कीबोर्ड
      valor.setText("1234.56");                          // "1.234,56" दिखाता है (pt-BR)

      Label resultado = new Label("");

      Button somar = new Button("Somar 10");
      somar.onAction(o ->
      {
         double v = Double.parseDouble(valor.getTextWithoutMask()); // 1234.56
         double total = v + 10;
         resultado.setText("Total: " + total);
      });

      add(LAY_FILL, valor);
      add(LAY_AUTO, somar);
      add(LAY_FILL, resultado);
   }
}

नीचे दिया गया अंश केवल मुख्य भाग दिखाता है। चलाने के लिए, इसे ऊपर दिए गए MainWindow ढाँचे में रखें।

न्यूनतम अंश

import dev.crossfly.ui.*;
import dev.crossfly.ui.style.*;
import static dev.crossfly.ui.UIConstants.EditMode;

TextField valor = new TextField("");
valor.caption("Valor");
valor.<TextFieldStyle>getStyle().decimalPlaces(2); // setMode से पहले सेट करें
valor.setMode(EditMode.CURRENCY, true);            // मुद्रा + मास्क + कैलकुलेटर कीबोर्ड

// प्रारंभिक मान:
valor.setText("1234.56"); // "1.234,56" दिखाता है (pt-BR)

Button somar = new Button("Somar");
somar.onAction(o ->
{
   double v = Double.parseDouble(valor.getTextWithoutMask()); // 1234.56
   // ... गणना
});

कस्टम मास्क के लिए (उदा.: स्पष्ट रूप से 3 दशमलव स्थान):

valor.<TextFieldStyle>getStyle()
   .mask(TextField.getDefaultCurrencyMask(3)); // बाद में setMode(CURRENCY, true)

गहराई से जानें

क्या यह पृष्ठ उपयोगी था?