在项目中经常会遇到需要再循环中创建按钮或者多个可创建事件组件,此时手动创建会使得代码量庞大冗余并且不易修改,再循环中创建组件并且绑定事件后再放入容器中使得组件显示并可执行绑定事件极为重要,此时需要用到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