【问题标题】:JAVAFX How to update checkbox deselect after change?JAVAFX 如何在更改后更新复选框取消选择?
【发布时间】:2021-05-05 05:45:33
【问题描述】:

您好,我正在尝试编写一个 JavaFX GUI 应用程序,该应用程序允许用户使用一组复选框选择一组披萨配料。假设每个配料的价格为 50 美分,一个普通的比萨饼价格为 10 美元,请显示比萨饼的成本。请注意,一旦选中或取消选中浇头,披萨的成本应自动更新。我几乎让它工作了,但是当我单击多个框时,价格会发生变化,我试图为每个顶部增加 0.50 美分,如果我取消选择复选框 -0.50 美分,但是当我选择多个复选框时,它会增加更多。我怎样才能改变这个谢谢。

import javafx.scene.control.CheckBox;
import javafx.scene.text.Text;
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;


public class PizzaMenu extends VBox
{
    private double cost;
    private Text text;
    private CheckBox checkbox1, checkbox2, checkbox3, checkbox4, checkbox5, checkbox6;
    public PizzaMenu()
    {
        cost=10.00;
        text=new Text("Pizza Cost:" + cost);
        checkbox1 = new CheckBox("Extra Cheese");
        checkbox1.setOnAction(this::processCheckBox);
        checkbox2 = new CheckBox("Green Pepper");
        checkbox2.setOnAction(this::processCheckBox);
        checkbox3 = new CheckBox("Pepperoni");
        checkbox3.setOnAction(this::processCheckBox);
        checkbox4 = new CheckBox("Onion");
        checkbox4.setOnAction(this::processCheckBox);
        checkbox5 = new CheckBox("Sausage");
        checkbox5.setOnAction(this::processCheckBox);
        checkbox6 = new CheckBox("Anchovies");
        checkbox6.setOnAction(this::processCheckBox);
        //layout container 4 hbox, 2 vbox?
        HBox hSet1 = new HBox(checkbox1, checkbox2);
        hSet1.setAlignment(Pos.CENTER);
        HBox hSet2 = new HBox(checkbox3, checkbox4);
        hSet2.setAlignment(Pos.CENTER);
        HBox hSet3 = new HBox(checkbox5, checkbox6);
        hSet3.setAlignment(Pos.CENTER);
        HBox userCost = new HBox(text);
        userCost.setAlignment(Pos.CENTER);
        VBox vSet1 = new VBox(hSet1,hSet2,hSet3,userCost);
        vSet1.setAlignment(Pos.CENTER);
        setSpacing(20);
        getChildren().addAll(vSet1);
    }
    public void processCheckBox(ActionEvent event)
    {
        if(checkbox1.isSelected() || checkbox2.isSelected() || checkbox3.isSelected() || checkbox4.isSelected() || checkbox5.isSelected() || checkbox6.isSelected())
        {
            cost = cost + 0.50;
            text.setText("Pizza Cost:" + cost);
        }
        else if(!checkbox1.isSelected() || !checkbox2.isSelected() || !checkbox3.isSelected() || !checkbox4.isSelected() || !checkbox5.isSelected() || !checkbox6.isSelected())
        {
            cost = cost - 0.50;
            text.setText("Pizza Cost:" + cost);
        }
    }
}

//更新

import javafx.scene.control.CheckBox;
import javafx.scene.text.Text;
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;


public class PizzaMenu extends VBox
{
    private double cost;
    private Text text;
    private CheckBox checkbox1, checkbox2, checkbox3, checkbox4, checkbox5, checkbox6;
    public PizzaMenu()
    {
        cost=10.00;
        text=new Text("Pizza Cost:" + cost);
        checkbox1 = new CheckBox("Extra Cheese");
        checkbox1.setOnAction(this::processCheckBox);
        checkbox2 = new CheckBox("Green Pepper");
        checkbox2.setOnAction(this::processCheckBox);
        checkbox3 = new CheckBox("Pepperoni");
        checkbox3.setOnAction(this::processCheckBox);
        checkbox4 = new CheckBox("Onion");
        checkbox4.setOnAction(this::processCheckBox);
        checkbox5 = new CheckBox("Sausage");
        checkbox5.setOnAction(this::processCheckBox);
        checkbox6 = new CheckBox("Anchovies");
        checkbox6.setOnAction(this::processCheckBox);
        //layout container 4 hbox, 2 vbox?
        HBox hSet1 = new HBox(checkbox1, checkbox2);
        hSet1.setAlignment(Pos.CENTER);
        HBox hSet2 = new HBox(checkbox3, checkbox4);
        hSet2.setAlignment(Pos.CENTER);
        HBox hSet3 = new HBox(checkbox5, checkbox6);
        hSet3.setAlignment(Pos.CENTER);
        HBox userCost = new HBox(text);
        userCost.setAlignment(Pos.CENTER);
        VBox vSet1 = new VBox(hSet1,hSet2,hSet3,userCost);
        vSet1.setAlignment(Pos.CENTER);
        setSpacing(20);
        getChildren().addAll(vSet1);
    }
    public void processCheckBox(ActionEvent event)
    {
//        if(checkbox1.isSelected() || checkbox2.isSelected() || checkbox3.isSelected() || checkbox4.isSelected() || checkbox5.isSelected() || checkbox6.isSelected())
//        {
//            cost = cost + 0.50;
//            text.setText("Pizza Cost:" + cost);
//        }
//        else if(!checkbox1.isSelected() || !checkbox2.isSelected() || !checkbox3.isSelected() || !checkbox4.isSelected() || !checkbox5.isSelected() || !checkbox6.isSelected())
//        {
//            cost = cost - 0.50;
//            text.setText("Pizza Cost:" + cost);
//        }
       if(event.getSource()==checkbox1)
       {
           if(checkbox1.isSelected())
           {
               cost = cost + 0.50;
               text.setText("Pizza Cost:" + cost);
           }
           else
           {
               cost = cost - 0.50;
               text.setText("Pizza Cost:" + cost);
           }
       }
        if(event.getSource()==checkbox2)
        {
            if(checkbox2.isSelected())
            {
                cost = cost + 0.50;
                text.setText("Pizza Cost:" + cost);
            }
            else
            {
                cost = cost - 0.50;
                text.setText("Pizza Cost:" + cost);
            }
        }
        if(event.getSource()==checkbox3)
        {
            if(checkbox3.isSelected())
            {
                cost = cost + 0.50;
                text.setText("Pizza Cost:" + cost);
            }
            else
            {
                cost = cost - 0.50;
                text.setText("Pizza Cost:" + cost);
            }
        }
        if(event.getSource()==checkbox4)
        {
            if(checkbox4.isSelected())
            {
                cost = cost + 0.50;
                text.setText("Pizza Cost:" + cost);
            }
            else
            {
                cost = cost - 0.50;
                text.setText("Pizza Cost:" + cost);
            }
        }
        if(event.getSource()==checkbox5)
        {
            if(checkbox5.isSelected())
            {
                cost = cost + 0.50;
                text.setText("Pizza Cost:" + cost);
            }
            else
            {
                cost = cost - 0.50;
                text.setText("Pizza Cost:" + cost);
            }
        }
        if(event.getSource()==checkbox6)
        {
            if(checkbox6.isSelected())
            {
                cost = cost + 0.50;
                text.setText("Pizza Cost:" + cost);
            }
            else
            {
                cost = cost - 0.50;
                text.setText("Pizza Cost:" + cost);
            }
        }
    }
}

【问题讨论】:

  • 不相关:布局是为了使用(扩展)

标签: java user-interface javafx checkbox


【解决方案1】:

问题是您要根据每个复选框重新计算整个价格,然后您应该从每个操作事件的基本成本开始:

public void processCheckBox(ActionEvent event)
{
    cost = 10.00;
    int toppings = checkbox1.isSelected() ? 1 : 0 +
                   checkbox2.isSelected() ? 1 : 0 +
                   checkbox3.isSelected() ? 1 : 0 +
                   checkbox4.isSelected() ? 1 : 0 +
                   checkbox5.isSelected() ? 1 : 0 +
                   checkbox6.isSelected() ? 1 : 0;
    cost = cost + (toppings * 0.50);
    text.setText("Pizza Cost:" + cost);
}

【讨论】:

  • 好的谢谢我已经修复了(我认为)会更新上面使用三元运算符很酷谢谢输入!
  • 您还可以生成更新,这样如果您使用简单的强制转换添加另一个复选框,则无需增加该方法: public void processCheckBox(ActionEvent event) { if ( ((CheckBox)event. getSource()).isSelected()) { 成本 = 成本 + 0.50; } 其他 { 成本 = 成本 - 0.50; } text.setText("披萨成本:" + cost); }
猜你喜欢
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 2010-12-20
  • 2017-04-26
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
相关资源
最近更新 更多