2010-12-13 2 views
0

Mon petit programme de conversion a quelques problèmes que je ne peux pas résoudre et ont besoin d'aide:Java JMenu et JTextField qui ne gère que le nombre de chaînes non

  1. Je veux que le champ de texte soit setEditable (false) jusqu'à ce que le l'utilisateur a sélectionné une devise. de sorte que l'utilisateur ne puisse rien entrer dans le champ de texte tant qu'il n'a pas sélectionné de devise
  2. si l'utilisateur a entré autre chose que le numéro dans le champ jtext, le résultat devrait fournir un message d'erreur.

J'ai passé un moment à essayer avec la première partie mais je finis par régler l'ensemble du champ de texte non modifiable.

merci voici mon code:

/* 
* 
* Currency Converter Window 
* A currency converting program that accepts user defined amount 
* and converts that amount in one of four currencies. 
* 
* Date 
* @author 
* 
*/ 

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.GridLayout; 

public class CurrencyConverterWin extends JFrame 
{ 

    //three panels for the GUI 
    private JPanel inputPanel; 
    private JPanel resultPanel; 
    private JPanel menuPanel; 
    //labels that identify the fields 
    private JLabel promptLabel; 
    private JLabel resultLabel; 
    private JLabel selectLabel; 
    //menu for the list of currencies 
    private JMenu currencyMenu; 
    private JMenuBar currencyMenuBar; 
    //input field for user to enter currency 
    private JTextField inputField; 
    private JButton goButton; 


    //initial values for each currency to 1 sterling 
    private double euros = 1.22; 
    private double japaneseYen = 152.07; 
    private double russianRubles = 42.53; 
    private double usDollars = 1.55; 

    public CurrencyConverterWin()      //constructor 
    { 
     super(); 
     this.setSize(600, 150);       //set size of the window 
     this.setLayout(new GridLayout(3, 1));   //split the grid with panels 
     this.setTitle("Currency Converter Window");  //set window title 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //close window 

     this.selectLabel = new JLabel("Select a currency to convert to: ", JLabel.RIGHT); 

     this.resultLabel = new JLabel(" ", JLabel.CENTER); 

     this.currencyMenu = new JMenu("(no currency selected)");  //create a menu of currencies 

     JMenuItem Euros = new JMenuItem("Euros");      //store the string Euros as a menu item 
     Euros.addActionListener(new java.awt.event.ActionListener()  //add a listener to this item 
     { 
      public void actionPerformed(java.awt.event.ActionEvent evt) //listen for event 
      { 
       menuChanged(evt); 
      } 
     }); 
     this.currencyMenu.add(Euros); 

     JMenuItem JapaneseYen = new JMenuItem("Japanese Yen");   //store the string Japanese Yen as a menu item 
     JapaneseYen.addActionListener(new java.awt.event.ActionListener() //add a listener to this item 
     { 
      public void actionPerformed(java.awt.event.ActionEvent evt) 
      { 
       menuChanged(evt); 
      } 
     }); 
     this.currencyMenu.add(JapaneseYen); 

     JMenuItem RusRubbles = new JMenuItem("Russian Rubles");   //store the string russian rubles as a menu item 
     RusRubbles.addActionListener(new java.awt.event.ActionListener() //add a listener to this item 
     { 
      public void actionPerformed(java.awt.event.ActionEvent evt) 
      { 
       menuChanged(evt); 
      } 
     }); 
     this.currencyMenu.add(RusRubbles); 

     JMenuItem USD = new JMenuItem("US Dollars");     //store the string US Dollars as a menu item 
     USD.addActionListener(new java.awt.event.ActionListener()  //add a listener to this item 
     { 
      public void actionPerformed(java.awt.event.ActionEvent evt) 
      { 
       menuChanged(evt); 
      } 
     }); 
     this.currencyMenu.add(USD); 


     currencyMenuBar = new JMenuBar();    //initialise a new menubar and add it to the currency menu 
     currencyMenuBar.add(currencyMenu); 

     this.menuPanel = new JPanel(); 
     this.menuPanel.add(this.selectLabel); 
     this.menuPanel.add(this.currencyMenuBar); 
     this.add(this.menuPanel); 

     this.promptLabel = new JLabel("(select a currency first) ", JLabel.RIGHT); 
     this.resultLabel = new JLabel(" ", JLabel.CENTER); 

     this.inputField = new JTextField("", 8); 
     //this.amountField.setEditable(false); //need help with this part 


     this.goButton = new JButton("GO"); 
     goButton.addActionListener(new java.awt.event.ActionListener() 
     { 

      public void actionPerformed(java.awt.event.ActionEvent evt) 
      { 
       buttonClicked(evt); 
      } 
     }); 

     this.inputPanel = new JPanel(); 
     this.inputPanel.add(this.promptLabel); 
     this.inputPanel.add(this.inputField); 
     this.inputPanel.add(this.goButton); 

     this.add(this.inputPanel); 

     this.resultPanel = new JPanel(); 
     this.resultPanel.add(this.resultLabel); 
     this.add(this.resultPanel); 
    } 

    /* 
    * change the state of the menu bar depending on the selected currency 
    */ 
    public void menuChanged(ActionEvent e) 
    { 
     if (e.getActionCommand().equals("Euros")) 
     { 
      currencyMenu.setText("Euros"); 
     } 
     if (e.getActionCommand().equals("Japanese Yen")) { 
      currencyMenu.setText("Japanese Yen"); 
     } 

     if (e.getActionCommand().equals("Russian Rubles")) { 
      currencyMenu.setText("Russian Rubles"); 
     } 

     if (e.getActionCommand().equals("US Dollars")) { 
      currencyMenu.setText("US Dollars"); 
     } 

    } 

    /* 
    * Events listeners for goButton 
    * when the goButton is clicked it should return the user's initial value 
    * plus the converted amount and some predefined strings. 
    */ 
    public void buttonClicked(ActionEvent evt) 
    { 
     if(currencyMenu.getText().equals("Euros")) 
     { 
      resultLabel.setText(inputField.getText() + " in sterling is " + EurosToSterling() + " Euros."); 
     } 
     if(currencyMenu.getText().equals("Japanese Yen")) 
     { 
      resultLabel.setText(inputField.getText() + " in sterling is " + JapaneseYenToSterling() + " Japanese Yen."); 
     } 
     if(currencyMenu.getText().equals("Russian Rubles")) 
     { 
      resultLabel.setText(inputField.getText() + " in sterling is " + RussianRublesToSterling() + " Russian Rubles."); 
     } 
     if(currencyMenu.getText().equals("US Dollars")) 
     { 
      resultLabel.setText(inputField.getText() + " in sterling is " + USDollarsToSterling() + " US Dollars."); 
     } 
    } 

    /* 
    * Functions for converting currencies 
    * get the user entry from inputField, convert it to a 
    * double and multiply it by the rate of a particular 
    * currency to a sterling. 
    */ 

    //calculate the rate for euros 
    double EurosToSterling() 
    { 
     double calcTotal = Double.parseDouble(inputField.getText()) * euros; 
     return calcTotal; 
    } 
    //calculate the conversion rate for japanese yen 
    double JapaneseYenToSterling() 
    { 
     double calcTotal = Double.parseDouble(inputField.getText()) * japaneseYen; 
     return calcTotal; 
    } 
    //calculate the rate for russian rubles 
    double RussianRublesToSterling() 
    { 
     double calcTotal = Double.parseDouble(inputField.getText()) * russianRubles; 
     return calcTotal; 
    } 
    //calculate the rate for us dollars 
    double USDollarsToSterling() 
    { 
     double calcTotal = Double.parseDouble(inputField.getText()) * usDollars; 
     return calcTotal; 
    } 

    /* 
    * main method to initialise CurrencyConverterWin 
    */ 
    public static void main(String[] args) 
    { 
     CurrencyConverterWin CurConWin = new CurrencyConverterWin(); 
     CurConWin.setVisible(true); 
    } 
} 

Répondre

0

Vous pourriez vouloir un KeyListener pour vérifier si ce que l'utilisateur est entré dans la zone de texte a le format.

2

Si vous ne souhaitez que les numéros alors les deux approches communes sont:

a) utiliser un JFormattedTextField. B) ajouter un DocumentFilter au document du champ de texte.

Les deux approches sont expliquées plus dans Swing tutorial. Voir les sections sur "Comment utiliser les champs de texte formatés" et "Fonctions de composant texte (implémentation d'un filtre de document)".

0

Votre exemple est vraiment long, je ne sais pas exactement ce que vous faites maintenant. Mais pour répondre à vos questions:

  1. Définissez la zone de texte sur non modifiable. Ajoutez un écouteur à votre sélection et lorsqu'une devise est sélectionnée, définissez la zone de texte sur éditable.
  2. Utilisez un JFormattedTextField pour empêcher formats non souhaités.
Questions connexes