JavaFX-循环创建Item绑定事件并放入容器

本文介绍了如何在JavaFX中使用ArrayList动态创建SplitMenuButton组件,并在循环中为每个item添加点击事件。通过示例代码展示了如何读取数据、创建CheckMenuItem、设置事件处理以及在SplitMenuButton中展示和管理这些组件。此外,还提供了添加和删除事件处理的示例方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在项目中经常会遇到需要再循环中创建按钮或者多个可创建事件组件,此时手动创建会使得代码量庞大冗余并且不易修改,再循环中创建组件并且绑定事件后再放入容器中使得组件显示并可执行绑定事件极为重要,此时需要用到java的基础功能:LIST

上动图:

如图所示,可以随意读取数据后将数据内容放在SplitMenuButton内,并且为每个item都加上了绑定事件。

list基本用法:

基本用法:
 //        创建list,存放一下item,创建点击事件(以menuItem为例)
ArrayList<MenuItem> itemlists = new ArrayList<>();
add(String item)  //依次往后添加添加元素
add(String item, int index) //在指定位置处添加元素
remove(int position) //删除第几个元素(索引从0开始)
remove(String item) //删除相同的元素
removeAll() //删除所有元素

SplitMenuButton基本用法:JavaFX - SplitMenuButton​​​​​​​

其中,简单用到的smb方法:

 smb.getItems().clear();//清除smb中的所有item

 smb.getItems().addAll(itemlists);//将list中的item全部添加进smb

 smb.show();//显示smb中的所有item

 为smb绑定点击事件:

        smb.setText("请点击");
        smb.setFont(new Font(20));//字体大小

        smb.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
                smb.show();
            }
        });

 在for循环中创建item并绑定点击事件(其中包含选中及未选中,sheet为excel数据)::

  for (int i = 0; i < sheet.getRows(); i++) {
                        for (int j = 0; j < sheet.getColumns(); j++) {
                            Cell cell = sheet.getCell(j, i); //获得单元格
                            if (cell.getContents().equals(test_level)) {
                                int t = cell.getRow();
                                Cell celllevel = sheet.getCell(0, t); //获得单元格 Cell cell=sheet.getCell(j, i); //获得单元格
                                Cell cellleve2 = sheet.getCell(1, t); //获得单元格 Cell cell=sheet.getCell(j, i); //获得单元格
                                Cell cellleve3 = sheet.getCell(2, t); //获得单元格 Cell cell=sheet.getCell(j, i); //获得单元格
                                Cell cellleve4 = sheet.getCell(3, t); //获得单元格 Cell cell=sheet.getCell(j, i); //获得单元格
                                Cell cellleve5 = sheet.getCell(4, t); //获得单元格 Cell cell=sheet.getCell(j, i); //获得单元格


                                if (cellleve5.getContents().equals(typeno)) {
//                                    smb.getItems().addAll(new MenuItem("编号:" + celllevel.getContents() + "   等级:" + cellleve2.getContents() + "   名称:" + cellleve3.getContents()));
//                                    + "类别:" + cellleve5.getContents()
//                                    + "   考试时间:" + cellleve4.getContents()
                                    CheckMenuItem item = new CheckMenuItem("编号:" + celllevel.getContents() + "   等级:" + cellleve2.getContents() + "   名称:" + cellleve3.getContents());
                                    item.setOnAction(new EventHandler<ActionEvent>() {
                                        @Override
                                        public void handle(ActionEvent event) {
                                            if (item.isSelected()) {
                                                showmsgname(cellleve3.getContents(), l_tst2);
                                                addtosendmsg(celllevel.getContents(), l_tst, cellleve4.getContents());


                                            } else {
//                                                System.out.println("需要删除");
                                                deletemag(celllevel.getContents(), l_tst, cellleve4.getContents());
                                                deletemsgname(l_tst2, cellleve3.getContents());
                                            }
                                        }
                                    });
                                    itemlists.add(item);
                                }
                            }
                        }
                    }

添加进text的方法:

    private void showmsgname(String contents, TextArea l_tst2) {
        String old = l_tst2.getText();

        l_tst2.setText(contents + "\n" + old);
        long count2 = l_tst2.getText().codePoints().filter(ch -> ch == '\n').count();
        System.out.println("添加之后" + count2);

    }

 

 取消选中的删除方法:


    private void deletemsgname(TextArea l_tst2, String contents) {
        //l_tst2所有值
        //content需要删除
        String a = l_tst2.getText();

        String c;

        String b = contents;
        System.out.println(b);
        c = a.replace( b+"\n" , "");
        System.out.println(c);
        l_tst2.setText(c);
        
    }

 从excel表格中获取数据并传给item需要说过程方代码的话下次有时间再放,用的包为jxl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值