Java определяет, был ли выбран JRadioButton

Я знаю, что в управляемой событиями программе на Java можно узнать, какой объект вызвал событие (например, JRadioButton был выбран, поэтому определенное действие будет иметь место). Мой вопрос, если у вас есть 2 JRadioButtons в одной группе, с добавленными слушателями действий, и вы продолжаете выбирать из одного в другой, можно ли выяснить, что JRadioButton был ранее выбран? Другими словами, если я выбрал другой JRadioButtonМожно ли написать код, который определяет, какой JRadioButton был ранее выбран до выбора текущего JRadioButton?

public class Drinks extends JPanel implements ActionListener{
double drinksPrice = 2.10;
double noDrinks = 0;
static  String selectedDrink;
JRadioButton btnPepsi = new JRadioButton("Pepsi"); //add a button to choose different drinks

JRadioButton btnMtDew = new JRadioButton("Mt Dew"); 

JRadioButton btnDietPepsi= new JRadioButton("Diet Pepsi");

JRadioButton btnCoffee = new JRadioButton("Coffee");

JRadioButton btnTea = new JRadioButton("Tea");

JRadioButton btnNone = new JRadioButton("None");
JLabel lblDrinksHeading = new JLabel("Choose a drink (each drink is $2.10):");
ButtonGroup drinksButtonGroup = new ButtonGroup();



private static final long serialVersionUID = 1L;

public Drinks(){

    setLayout(new FlowLayout());    //Using GridLayout  

    btnPepsi.setActionCommand(btnPepsi.getText());    //set the ActionCommand to getText so I can retrieve the name for the receipt

    btnMtDew.setActionCommand(btnMtDew.getText());

    btnDietPepsi.setActionCommand(btnDietPepsi.getText());

    btnCoffee.setActionCommand(btnCoffee.getText());

    btnTea.setActionCommand(btnTea.getText());

    btnNone.setActionCommand(btnNone.getText());

    drinksButtonGroup.add(btnPepsi);
    drinksButtonGroup.add(btnMtDew);
    drinksButtonGroup.add(btnDietPepsi);
    drinksButtonGroup.add(btnCoffee);
    drinksButtonGroup.add(btnTea);
    drinksButtonGroup.add(btnNone);
    btnNone.setSelected(true); //set default to "none"

    btnPepsi.addActionListener(this);
    btnMtDew.addActionListener(this);
    btnDietPepsi.addActionListener(this);
    btnCoffee.addActionListener(this);
    btnTea.addActionListener(this);
    btnNone.addActionListener(this);

    add(lblDrinksHeading);

    add(btnPepsi);

    add(btnDietPepsi);

    add(btnMtDew);

    add(btnCoffee);

    add(btnTea);

    add(btnNone);


    repaint();
    revalidate();

    selectedDrink = drinksButtonGroup.getSelection().getActionCommand();
//add the drink price to totalPrice, it is adding it every time though, even if its none
/*if(drinksButtonGroup.getSelection() == btnNone){
    MenuFrame.totalPrice += 0;
    }
    else{
        MenuFrame.totalPrice += drinksPrice;
        }
*/


//      buttonGroup1.getSelection().getActionCommand()

//String selectedDrink = drinksButtonGroup.getSelection().toString();
//class 

}

@Override
public void actionPerformed(ActionEvent e) {

    Object source = e.getSource();

    if(source == btnNone) {

        MenuFrame.totalPrice += 0;
        TaxAndGratuityFrame.subtotalTextField.setText("$" + MenuFrame.totalPrice);
        TaxAndGratuityFrame.subtotalVariable = MenuFrame.totalPrice;
        TaxAndGratuityFrame.taxVariable = TaxAndGratuityFrame.subtotalVariable * TaxAndGratuityFrame.TAX_RATE;
        TaxAndGratuityFrame.taxTextField.setText("$" + TaxAndGratuityFrame.taxVariable);
        Receipt.receiptTotal.setText("Total: $" + (MenuFrame.totalPrice));
        Receipt.receiptsubtotal.setText("Subtotal: " + (TaxAndGratuityFrame.subtotalVariable));

    }

    else {

        MenuFrame.totalPrice += drinksPrice;
        TaxAndGratuityFrame.subtotalTextField.setText("$" + MenuFrame.totalPrice);
        TaxAndGratuityFrame.subtotalVariable = MenuFrame.totalPrice;
        TaxAndGratuityFrame.taxVariable = TaxAndGratuityFrame.subtotalVariable * TaxAndGratuityFrame.TAX_RATE;
        TaxAndGratuityFrame.taxTextField.setText("$" + TaxAndGratuityFrame.taxVariable);
        Receipt.receiptTotal.setText("Total: $" + (MenuFrame.totalPrice));
        Receipt.receiptsubtotal.setText("Subtotal: " + (TaxAndGratuityFrame.subtotalVariable));

    }

}

Изменить: я буду более конкретным. Я создаю "воображаемую" ресторанную программу. В нем я перечисляю несколько напитков с одинаковой ценой (например, Pepsi: 2,10 доллара, Mountain Due: 2,10 доллара и т. Д.). Эти перечисленные напитки являются JRadioButtons. После того, как клиент нажмет одну из этих кнопок, чтобы "заказать напиток", в переменную "итого" будет добавлено 2,10 доллара. Однако возникает проблема, когда пользователь хочет поменять напиток, потому что если он щелкнет по другому JRadioButton, $2,10 все равно будет добавлено к переменной "total". Я хочу сделать так, чтобы они могли поменять напиток, не добавляя к заказу 2,10 доллара каждый раз.

2 ответа

Я думаю, что проблема в этой строке:

MenuFrame.totalPrice += drinksPrice;

Потому что "+=" увеличивает значение на другое значение вместо простого добавления двух значений.

Таким образом, каждый раз, когда пользователь нажимает одну из переключателей, он будет постоянно добавлять 2,10 к вашему общему значению, тогда как если бы вы были, вы просто скажете:

MenuFrame.totalPrice = MenuFrame.totalPrice + drinksPrice;

Он установит вашу общую стоимость, равную текущей общей цене плюс цена напитков, вместо добавления 2,10 к общей стоимости при каждом нажатии кнопки.

Возможно, я неправильно понимаю вопрос, но я думаю о том, как создать общедоступную переменную, а затем в слушателях действия обновить переменную с помощью только что выбранной кнопки-переключателя. Когда запускается выбранное событие, вы можете посмотреть на переменную, чтобы увидеть, какой переключатель был выбран в последний раз, сделать то, что вы хотите, и затем обновить его с помощью нового переключателя.

Другие вопросы по тегам