2010-08-22 5 views
1

J'ai quelques problèmes avec mon code, je ne peux pas voir ce qui ne va pas avec la logique, mais c'est ici. Je veux qu'ils aient le bouton radio pour choisir ou, et quand on est sélectionné (bouton radio) la zone de texte n'est pas disponible et vice versa. Voici le segment du code. Quand je vais et vient sur les boutons radio, les deux ne deviennent pas sélectionnables, et je ne sais pas pourquoi.Étiquette avec le problème de bouton radio

private void PriceTab() 
{ 
    pricePanel = new JPanel(new FlowLayout()); 


    final JRadioButton poolPrice= new JRadioButton("Pool"); 
    final JRadioButton tubPrice = new JRadioButton("Hot Tub"); 

    poolPrice.setSelected(true); 

    ButtonGroup group = new ButtonGroup(); 
    group.add(poolPrice); 
    group.add(tubPrice); 

    pricePanel.add(poolPrice); 
    pricePanel.add(tubPrice); 


    final JLabel poolLabel = new JLabel("Enter the pool's volume:    "); 
    final JTextField poolField = new JTextField(10); 
    pricePanel.add(poolLabel); 
    pricePanel.add(poolField); 

    final JTextField tubField = new JTextField(10); 
    final JLabel tubLabel = new JLabel ("Enter the tub's volume:  "); 
    pricePanel.add(tubLabel); 
    pricePanel.add(tubField); 


    JButton calculatePrice = new JButton("Calculate Price"); 
    calculatePrice.setMnemonic('C'); 
    pricePanel.add(calculatePrice); 
    pricePanel.add(createExitButton()); 

    pricePanel.add(new JLabel("The price is: ")); 
    final JTextField priceField = new JTextField(10); 
    priceField.setEditable(false); 
    pricePanel.add(priceField); 

    final JTextArea messageArea = createMessageArea(1, 25, 
    "*Please only select one section"); 
    pricePanel.add(messageArea); 


    calculatePrice.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 

    double pool = Double.parseDouble (poolField.getText()); 
    double tub = Double.parseDouble(tubField.getText()); 

    double price; 
    if (poolPrice.isSelected()) { 
     price = pool * 100; 
    } else { 
     price = tub * 75; 
    } 
    priceField.setText(df.format(price)); 
    } 
    }); 



    ActionListener priceListener = new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == poolPrice) { 
    tubLabel.setEnabled(false); 
    tubField.setEnabled(false); 
    messageArea.setVisible(false); 
    } else if (e.getSource() == tubPrice) { 
    poolLabel.setEnabled(false); 
    poolField.setEnabled(false); 
    messageArea.setVisible(false); 
    } 
    } 
    }; 

    poolPrice.addActionListener(priceListener); 
    tubPrice.addActionListener(priceListener); 
} 

Répondre

3
ActionListener priceListener = new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      if (e.getSource() == poolPrice) { 
       tubLabel.setEnabled(false); 
       tubField.setEnabled(false); 
       // Re-enable the previously disabled labels 
       poolLabel.setEnabled(true); 
       poolField.setEnabled(true); 
       messageArea.setVisible(false); 
      } else if (e.getSource() == tubPrice) { 
       poolLabel.setEnabled(false); 
       poolField.setEnabled(false); 
       // Re-enable disabled labels 
       tubLabel.setEnabled(true); 
       tubField.setEnabled(true); 

       messageArea.setVisible(false); 
      } 
      } 
     }; 

Vous devez réactiver les boutons désactivés.

+0

Très bien, ça marche. Maintenant, pour une raison quelconque, quand je vais entrer seulement 1 ensemble de nombres pour chaque, IE si je voulais que le volume de la piscine soit de 2, ce qui signifierait que le bain à remous serait vide, je reçois des erreurs. Mais si je remplis un nombre dans la zone de bain à remous, et 2 dans la piscine, je reçois un prix de 200. Exception dans le fil "AWT-EventQueue-0" java.lang.NumberFormatException: vide Chaîne \t à sun.misc .FloatingDecimal.readJavaFormatString (FloatingDecimal.java:994) \t à java.lang.Double.parseDouble (Double.java:510) \t à la.GUI $ 1.actionPerformed (La.java:154) – David

+0

Double piscine = Double. parseDouble (poolField.getText()); double baignoire = Double.parseDouble (tubField.getText()); Si l'un des champs de texte est vide, vous obtiendrez une exception numberformatexception car vous ne pouvez pas convertir une chaîne vide ("") en un nombre. Vous devez gérer ce cas. – I82Much