java - 当取消选择复选框或单选按钮时,如何防止 if 语句更改值

标签 java swing checkbox netbeans radio-button

我目前正在开发一个简单的程序来学习如何制作 GUI。用户可以选中某些选项,如果不再希望拥有它们,则可以取消选中它们。但是,当取消选择该框并进行另一个选择时,它仍然会计算我的 else 语句并相应地减少该值。

下面的代码就是一个这样的例子,即使我什么都不做,点击其他东西,该值仍然从变量“itemTotal”中扣除,我认为这是因为每次都会触发一个偶数并采取行动,但这不是我想要发生的事情

if(cheesebx.isSelected())
        {
            if(itemTotal == 0)
            {
                JOptionPane.showMessageDialog(null, "Please select Single, or Double burger first");
                cheesebx.setSelected(false);
            }
            else
            {
            itemTotal += cheese;
            }
        }
        else if (!cheesebx.isSelected())
        {
            itemTotal -= cheese;
        }

我注意到,如果选择了其他内容,以下代码也会从总计框中扣除值。

if(single_radio.isSelected())
        {
            if(itemTotal != 0 && itemTotal != single)
            {
                itemTotal -= two;

                itemTotal += single;
            }

            if(itemTotal == 0)
            {
                itemTotal += single;
            }


        }

这是我的完整代码。

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package week3lab;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class posGUI extends javax.swing.JFrame implements ActionListener {

    public double single = 3.50;
    public double two = 4.75;
    public double cheese = 0.50;
    public double bacon  = 1.25;
    public double meal   = 4.00;

    public double orderTotal = 0;
    public double itemTotal  = 0;

    public int quantity = 1;


    /**
     * Creates new form posGUI
     */
    public posGUI() {
        initComponents();
        exitbtn.addActionListener(this);
        addbtn.addActionListener(this);
        newbtn.addActionListener(this);
        nextbtn.addActionListener(this);

        single_radio.addActionListener(this);
        double_radio.addActionListener(this);

        cheesebx.addActionListener(this);
        baconbx.addActionListener(this);

        mealbx.addActionListener(this);

        pricetxt.setText(Double.toString(itemTotal));
        totaltxt.setText(Integer.toString(quantity));
    }



    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        buttonGroup1 = new javax.swing.ButtonGroup();
        jPanel1 = new javax.swing.JPanel();
        single_radio = new javax.swing.JRadioButton();
        double_radio = new javax.swing.JRadioButton();
        cheesebx = new javax.swing.JCheckBox();
        baconbx = new javax.swing.JCheckBox();
        mealbx = new javax.swing.JCheckBox();
        jLabel1 = new javax.swing.JLabel();
        pricetxt = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        quantitytxt = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        totaltxt = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        ordertxt = new javax.swing.JTextArea();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        exitbtn = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();
        addbtn = new javax.swing.JMenuItem();
        nextbtn = new javax.swing.JMenuItem();
        newbtn = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        buttonGroup1.add(single_radio);
        single_radio.setText("Single Burger");

        buttonGroup1.add(double_radio);
        double_radio.setText("Double Burger");

        cheesebx.setText("Add Cheese");

        baconbx.setText("Add Bacon");

        mealbx.setText("Make it a meal");

        jLabel1.setText("Item Price");

        jLabel2.setText("YOUR ORDER");

        jLabel3.setText("Quantity");

        jLabel4.setText("Order Total");

        ordertxt.setColumns(20);
        ordertxt.setRows(5);
        jScrollPane1.setViewportView(ordertxt);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(mealbx)
                            .addComponent(double_radio)
                            .addComponent(cheesebx)
                            .addComponent(baconbx))
                        .addGap(18, 18, 18)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 257, Short.MAX_VALUE)
                        .addContainerGap())
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(single_radio)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jLabel2)
                        .addGap(92, 92, 92))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel1)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(pricetxt)
                                .addGap(18, 18, 18)
                                .addComponent(jLabel4))
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGap(0, 0, Short.MAX_VALUE)
                                .addComponent(jLabel3)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(quantitytxt)
                            .addComponent(totaltxt, javax.swing.GroupLayout.DEFAULT_SIZE, 118, Short.MAX_VALUE))
                        .addGap(22, 22, 22))))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(single_radio)
                    .addComponent(jLabel2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(double_radio)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(cheesebx)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(baconbx)
                        .addGap(18, 18, 18)
                        .addComponent(mealbx))
                    .addComponent(jScrollPane1))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(quantitytxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(pricetxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(totaltxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel4))
                .addGap(32, 32, 32))
        );

        jMenu1.setText("File");

        exitbtn.setText("Exit");
        jMenu1.add(exitbtn);

        jMenuBar1.add(jMenu1);

        jMenu2.setText("Order");

        addbtn.setText("Add to Order");
        jMenu2.add(addbtn);

        nextbtn.setText("Clear for Next Item");
        jMenu2.add(nextbtn);

        newbtn.setText("New Order");
        jMenu2.add(newbtn);

        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    /**
     * @param args the command line arguments
     */


   @Override
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == exitbtn)
        {
            System.exit(0);
        }

        if(e.getSource() == nextbtn)
        {
            ordertxt.append(Integer.toString(quantity) + "");

            if(single_radio.isSelected())
            {
                ordertxt.append("single ");
            }

            if (cheesebx.isSelected())
            {
                ordertxt.append("cheese ");
            }

            if (baconbx.isSelected())
            {
                ordertxt.append("bacon ");
            }

            if(mealbx.isSelected())
            {
                ordertxt.append("meal ");
            }

            orderTotal += itemTotal * quantity;

            ordertxt.append("at " + Double.toString(itemTotal) + "" + "each");

            totaltxt.setText(Double.toString(orderTotal));
        }

        if(single_radio.isSelected())
        {
            if(itemTotal != 0 && itemTotal != single)
            {
                itemTotal -= two;

                itemTotal += single;
            }

            if(itemTotal == 0)
            {
                itemTotal += single;
            }


        }

        if(double_radio.isSelected())
        {
            if(itemTotal != 0 && itemTotal != two)
            {
                itemTotal -= single;

                itemTotal += two;
            }

            if(itemTotal == 0)
            {
                itemTotal += two;
            }


        }

        if(cheesebx.isSelected())
        {
            if(itemTotal == 0)
            {
                JOptionPane.showMessageDialog(null, "Please select Single, or Double burger first");
                cheesebx.setSelected(false);
            }
            else
            {
            itemTotal += cheese;
            }


        }

        if(baconbx.isSelected())
        {
            if(itemTotal == 0)
            {
                JOptionPane.showMessageDialog(null, "Please select Single, or Double burger first");
                baconbx.setSelected(false);
            }
            else
            {
                itemTotal += bacon;
            }


        }

        if(mealbx.isSelected())
        {    
            if(itemTotal == 0)
            {
                JOptionPane.showMessageDialog(null, "Please select Single, or Double burger first");
                mealbx.setSelected(false);
            }
            else
            {
                itemTotal += meal;
            }
        }

        pricetxt.setText(Double.toString(itemTotal));
    }


    // Variables declaration - do not modify                     
    private javax.swing.JMenuItem addbtn;
    private javax.swing.JCheckBox baconbx;
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JCheckBox cheesebx;
    private javax.swing.JRadioButton double_radio;
    private javax.swing.JMenuItem exitbtn;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JCheckBox mealbx;
    private javax.swing.JMenuItem newbtn;
    private javax.swing.JMenuItem nextbtn;
    private javax.swing.JTextArea ordertxt;
    private javax.swing.JTextField pricetxt;
    private javax.swing.JTextField quantitytxt;
    private javax.swing.JRadioButton single_radio;
    private javax.swing.JTextField totaltxt;
    // End of variables declaration                   
}

最佳答案

当您单击常规按钮时,它不会从 actionPerformed(ActionEvent e) 方法返回,但会继续检查 JRadioButton 的选择。解决方案是使用 if {...} else if {...} 语句,如下所示:

@Override
public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();
    if (source == exitbtn) {
        System.exit(0);
    } else if (source == nextbtn) {
        ordertxt.append(Integer.toString(quantity) + "");

        if (single_radio.isSelected()) {
            ordertxt.append("single ");
        } else if (cheesebx.isSelected()) {
            ordertxt.append("cheese ");
        } else if (baconbx.isSelected()) {
            ordertxt.append("bacon ");
        } else if (mealbx.isSelected()) {
            ordertxt.append("meal ");
        }

        orderTotal += itemTotal * quantity;

        ordertxt.append("at " + Double.toString(itemTotal) + "" + "each");

        totaltxt.setText(Double.toString(orderTotal));
    } else if(source == single_radio) {
        if (single_radio.isSelected()) {
            if (itemTotal != 0 && itemTotal != single) {
                itemTotal -= two;

                itemTotal += single;
            }

            if (itemTotal == 0) {
                itemTotal += single;
            }
        }
    }
    // Etcetera
}

确保显式检查每个操作的源对象。

另一种选择是实现单独的 Action 对象,如下所述:https://docs.oracle.com/javase/tutorial/uiswing/misc/action.html

关于java - 当取消选择复选框或单选按钮时,如何防止 if 语句更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39562274/

相关文章:

ajax - Django 和 AJAX : Delete Multiple Items wth Check Boxes

c# - 假设盐是随机的,是否可以从密码(与 key )派生初始化 vector ?

java - 为什么方法在语句之后需要一个始终返回 true 的返回值?

java - 当我向子节点添加字符串时出现错误

javascript - Handlebars/Ember.Checkbox - 2 个绑定(bind)的复选框,一个勾选为 false

javascript - 如何从复选框 onclick 或 onchange 调用函数

java - Spring Boot 配置覆盖被忽略

java - 什么是 PECS(生产者扩展消费者 super )?

java - TableCellEditor 可以知道它正在编辑哪个 JTable 吗?

java - 配置弹出窗口的宽度、换行和字体