2017-09-23 1 views
0

Je suis en train de faire un programme d'écriture de vérification GUI, je veux demander comment utilisez-vous le nombre que l'utilisateur tape, et le convertir en mots dans un JLabel?Je suis en train de faire un programme d'écriture de vérification GUI, je veux demander comment utilisez-vous le nombre que l'utilisateur tape, et le convertir en mots dans un JLabel?

Par exemple: si je tape 1435,56 la sortie serait un mille quatre cent trente cinq dollars cinquante six cents

code:

package CheckWriter; 

import java.awt.*; 

    import java.awt.event.*; 

    import java.text.DecimalFormat; 



import javax.swing.*; 



    public class CheckPanel extends JPanel{ 



private JLabel amountLabel, nameLabel, orderpayLabel,bankLabel,fmtAmountLabel; 

private JTextField name; 

String appli_Name; 

String bank_amount; 

private JTextField amount; 



public CheckPanel(){ 



    setLayout (new FlowLayout()); 





    nameLabel = new JLabel("Name:"); 

    nameLabel.setLocation(10,10);; 

    add(nameLabel); 



    name = new JTextField(7); 

    name.setLocation(20,10); 

    add(name); 



    amountLabel = new JLabel("Check Amount:"); 

    amountLabel.setLocation(30,10); 

    add(amountLabel); 



    amount = new JTextField(7); 

    amount.setLocation(40,10); 

    add(amount); 



    orderpayLabel = new JLabel(""); 

    orderpayLabel.setLocation(15, 30); 

    add(orderpayLabel); 



    bankLabel = new JLabel(" Frost Banking" + "\n"); 

    bankLabel.setLocation(45,25); 

    add(bankLabel); 



    fmtAmountLabel = new JLabel(""); 

    fmtAmountLabel.setLocation(45, 35); 

    add(fmtAmountLabel); 



    event e = new event(); 

      name.addActionListener(e); 

      amount.addActionListener(e); 

    } 

    private class event implements ActionListener{ 

    public void actionPerformed(ActionEvent e) { 



     appli_Name = name.getText(); 

     orderpayLabel.setText("Pay to the order of :" +" " + appli_Name); 



     bank_amount = amount.getText(); 

     double amount = Double.parseDouble(bank_amount); 

     DecimalFormat formatter = new DecimalFormat("$###,###,###,###.##"); 

     fmtAmountLabel.setText(formatter.format(amount)); 

    } 

} 

Répondre

0

Pour votre problème avec le montant: Vous devez diviser le String avec amount.getText().split(".");

Ensuite, vous pouvez analyser les deux chaînes avec la classe suivante (Voir question connexe: How to convert number to words in java) avec la classe suivante (copié à partir de la question Référé):

import java.text.DecimalFormat; 

public class EnglishNumberToWords { 

    private static final String[] tensNames = { 
     "", 
     " ten", 
     " twenty", 
     " thirty", 
     " forty", 
     " fifty", 
     " sixty", 
     " seventy", 
     " eighty", 
     " ninety" 
    }; 

    private static final String[] numNames = { 
     "", 
     " one", 
     " two", 
     " three", 
     " four", 
     " five", 
     " six", 
     " seven", 
     " eight", 
     " nine", 
     " ten", 
     " eleven", 
     " twelve", 
     " thirteen", 
     " fourteen", 
     " fifteen", 
     " sixteen", 
     " seventeen", 
     " eighteen", 
     " nineteen" 
    }; 

    private EnglishNumberToWords() {} 

    private static String convertLessThanOneThousand(int number) { 
     String soFar; 

     if (number % 100 < 20){ 
      soFar = numNames[number % 100]; 
      number /= 100; 
     } 
     else { 
      soFar = numNames[number % 10]; 
      number /= 10; 

      soFar = tensNames[number % 10] + soFar; 
      number /= 10; 
     } 
     if (number == 0) return soFar; 
     return numNames[number] + " hundred" + soFar; 
    } 


    public static String convert(long number) { 
     // 0 to 999 999 999 999 
     if (number == 0) { return "zero"; } 

     String snumber = Long.toString(number); 

     // pad with "0" 
     String mask = "000000000000"; 
     DecimalFormat df = new DecimalFormat(mask); 
     snumber = df.format(number); 

     // XXXnnnnnnnnn 
     int billions = Integer.parseInt(snumber.substring(0,3)); 
     // nnnXXXnnnnnn 
     int millions = Integer.parseInt(snumber.substring(3,6)); 
     // nnnnnnXXXnnn 
     int hundredThousands = Integer.parseInt(snumber.substring(6,9)); 
     // nnnnnnnnnXXX 
     int thousands = Integer.parseInt(snumber.substring(9,12)); 

     String tradBillions; 
     switch (billions) { 
      case 0: 
       tradBillions = ""; 
       break; 
      case 1 : 
       tradBillions = convertLessThanOneThousand(billions)+ " billion "; 
       break; 
      default : 
    tradBillions = convertLessThanOneThousand(billions) 
    + " billion "; 
} 
String result = tradBillions; 

String tradMillions; 
switch (millions) { 
case 0: 
    tradMillions = ""; 
    break; 
case 1 : 
    tradMillions = convertLessThanOneThousand(millions) 
    + " million "; 
    break; 
default : 
    tradMillions = convertLessThanOneThousand(millions) 
    + " million "; 
} 
result = result + tradMillions; 

String tradHundredThousands; 
switch (hundredThousands) { 
case 0: 
    tradHundredThousands = ""; 
    break; 
case 1 : 
    tradHundredThousands = "one thousand "; 
    break; 
default : 
    tradHundredThousands = convertLessThanOneThousand(hundredThousands) 
    + " thousand "; 
} 
result = result + tradHundredThousands; 

String tradThousand; 
tradThousand = convertLessThanOneThousand(thousands); 
result = result + tradThousand; 

// remove extra spaces! 
return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " "); 

}

Cette classe peut convertir vos entiers dans le format correct:

String yourstring = EnglishNumberToWords.convert(800)); 

ensuite afficher simplement cette chaîne. Note: Ne fonctionne qu'avec les nombres entre 0 et 999 999 999 999