为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法缩短由于对象属性相似而重复的代码?

有没有办法缩短由于对象属性相似而重复的代码?

慕尼黑8549860 2023-07-28 09:24:01
我有许多复选框,所有这些复选框都依赖于某个未选中的框,但如果确实选中了该框,则必须选中并隐藏该框。我知道人们一直在说 ArrayList,但是我不知道如何编辑 ArrayList 中项目的某些属性的语法。我的代码可以工作,我只需要这段代码更短,因为我相信如果它继续像这样运行,最终会减慢进程,并且我想了解这对于我有相同功能的其他对象是如何工作的。 public void cbxSalesSelectA() {    boolean t = cbx_SALES_Select_All.getText().equals("Select All");    cbx_SALESQtySold.setSelected(t);    cbx_SALESDateSold.setSelected(t);    cbx_SALESCustomer.setSelected(t);    cbx_SALESDiscount.setSelected(t);    cbx_SALESLineNumber.setSelected(t);    cbx_SALESConsultant.setSelected(t);    cbx_SALES_Header_Row.setSelected(t);    if (t) {        cbx_SALES_Select_All.setText("Deselect All");    } else {        cbx_SALES_Select_All.setText("Select All");    }} public void cbxLOCSelectA() {    boolean t = cbx_LOC_Select_All.getText().equals("Select All");    cbx_LOCHeight.setSelected(t);    cbx_LOCWidth.setSelected(t);    cbx_LOCDepth.setSelected(t);    cbx_LOCWeightCap.setSelected(t);    cbx_LOCAccessibility.setSelected(t);    cbx_LOC_Header_Row.setSelected(t);    if (t) {        cbx_LOC_Select_All.setText("Deselect All");    } else {        cbx_LOC_Select_All.setText("Select All");    }}
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

selected我不认为你真的可以提高代码的性能,但为了可读性,你可以在单独的方法中进行更改。例如


static void allSetSelected(boolean isSelected, CheckBox... boxes ) {

    Arrays.stream(boxes).forEach(b -> b.setSelected(isSelected));

}

并像这样在您的代码中使用它


public void cbxSalesSelectA() {

    boolean t = cbx_SALES_Select_All.getText().equals("Select All");

    allSetSelected(t, cbx_SALESQtySold,

                      cbx_SALESDateSold,

                      cbx_SALESCustomer,

                      cbx_SALESDiscount,

                      cbx_SALESLineNumber,

                      cbx_SALESConsultant,

                      cbx_SALES_Header_Row)

    if (t) {

        cbx_SALES_Select_All.setText("Deselect All");

    } else {

        cbx_SALES_Select_All.setText("Select All");

    }

}


public void cbxLOCSelectA() {

    boolean t = cbx_LOC_Select_All.getText().equals("Select All");

    allSetSelected(t, cbx_LOCHeight, cbx_LOCWidth, cbx_LOCDepth, cbx_LOCWeightCap, cbx_LOCAccessibility, cbx_LOC_Header_Row);

    if (t) {

        cbx_LOC_Select_All.setText("Deselect All");

    } else {

        cbx_LOC_Select_All.setText("Select All");

    }

}


查看完整回答
反对 回复 2023-07-28
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

如果您使用 ArrayList 或复选框对象数组,则只需使用循环来遍历所有复选框并根据需要选中或取消选中它们。


例如,


import javafx.application.Application;

import javafx.collections.FXCollections;

import javafx.scene.Scene;

import javafx.scene.control.CheckBox;

import javafx.scene.control.ComboBox;

import javafx.scene.layout.VBox;

import javafx.stage.Stage;


import java.util.ArrayList;

import java.util.List;


public class Example  extends Application {



    @Override

    public void start(Stage primaryStage) throws Exception {

        // Creating an ArrayList here and adding all the checkboxes required. In your

        // case you'd add your existing checkboxes

        List<CheckBox> list = new ArrayList<>();

        list.add(new CheckBox());

        list.add(new CheckBox());

        list.add(new CheckBox());

        list.add(new CheckBox());


        // this combobox controls whether or not all checkboxes are selected

        ComboBox<String> comboBox = new ComboBox<>();


        // two options to either select all or deselect all checkboxes

        comboBox.setItems(FXCollections.observableArrayList("Select All", "Deselect All"));


        // container to hold all the controls

        VBox vBox = new VBox();

        vBox.getChildren().add(comboBox);

        vBox.getChildren().addAll(list);


        // this is the important bit

        // if the combobox selection is changed, then this fires

        comboBox.setOnAction(event -> {

            // if the selected option is select all, then a for-each loop is used to make all the 

            // checkboxes in the arraylist checked and vice versa if the deselect option is selected

            if (comboBox.getSelectionModel().getSelectedItem().equalsIgnoreCase("Select All")) {

                for (CheckBox checkBox : list) checkBox.setSelected(true);

            } else {

                for (CheckBox checkBox : list) checkBox.setSelected(false);

            }

        });


        primaryStage.setScene(new Scene(vBox));

        primaryStage.setTitle("Example");

        primaryStage.setWidth(600);

        primaryStage.setHeight(400);

        primaryStage.show();

    }

}

希望这可以帮助。


查看完整回答
反对 回复 2023-07-28
  • 2 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信