2016-11-29 2 views
1

Я знаю, что в программе, управляемой событиями, в Java можно узнать, какой объект вызвал событие (например, выбрано JRadioButton, поэтому произойдет определенное действие). Мой вопрос в том, что если у вас есть 2 JRadioButtons в группе buttongroup, с добавленными к ним исполнителями действий, и вы продолжаете выбирать один от другого, можно ли узнать, что JRadioButton был выбран? Другими словами, если бы я выбрал еще один JRadioButton, можно ли написать код, который определяет, какой из JRadioButton был выбран ранее, до выбора текущего JRadioButton?Java, определяющий, был ли выбран 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. Я хочу сделать так, чтобы они могли менять напиток, не добавляя каждый раз $ 2.10 в заказ.

ответ

0

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

+0

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

+0

Я понимаю сейчас. Не видя существующего кода, вам нелегко сказать, что вы должны делать. Вы указали «полную» переменную. Существует ли вариант для того, чтобы пользователь мог изменить свое мнение и решил не заказывать напиток после его выбора? – MattCash

+0

Прошу прощения, я не собирался отправлять ответ выше ... Я собирался предложить, возможно, сохранить переменную «drinkTotals», в которой, если вы выберете переключатель, представляющий напиток, вы храните сумму, если они меняют напиток, вы меняете эту сумму в переменной, и если вы не выбираете напиток, вы храните его 0. Затем используйте его (и другие переменные), чтобы суммировать «итоговую» переменную. У вас есть существующий код? – MattCash

1

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

MenuFrame.totalPrice += drinksPrice; 

Поскольку «+ =» увеличивает значение на другое значение, а не просто добавить два значения.

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

MenuFrame.totalPrice = MenuFrame.totalPrice + drinksPrice; 

Он установит общую цену, равную текущая общая цена плюс цена на напитки, вместо того, чтобы добавлять 2.10 к общей стоимости каждый раз при нажатии кнопки.