javaFx ListView基础

这篇博客介绍了如何使用JavaFX的ListView组件进行数据展示和编辑。通过设置CellFactory,实现了TextFieldListCell和CheckBoxListCell的用法,允许用户对列表项进行文本编辑或复选操作。此外,还展示了如何自定义UI,创建包含按钮的ListCell,以实现更复杂的交互功能。

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

注释在代码中:

1、listView数据展示

2、数据编辑后取值StringConverter

3、数据编辑的方式setCellFactory

//listView.setCellFactory(TextFieldListCell.forListView());
        //cellfactory操作;自定义单元格
        //TextFieldListCell 表示是一个文本编辑框,可以更改为listCell的相关子类,
        //例如ComboxListCell 下拉列表等等类似的Cell
        //CheckBoxListCell

基本示例代码:

package application.com.listView;


import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.cell.TextFieldListCell;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import javafx.util.StringConverter;

public class BasicListView extends Application{
	
	
	public static void main(String[] args) {
		launch(args);
	}
	
	@Override
	public void start(Stage primaryStage) throws Exception {
		// TODO Auto-generated method stub
	
		//可观察的数据
		//ObservableList<String> obList = FXCollections.observableArrayList();
		//obList.add("list -a ");
		//ListView<String> listView = new ListView<String>(obList);
		ObservableList<Person> obList = FXCollections.observableArrayList();
		Person p = new Person();
		p.setNameString("lily");
		p.setAgeInteger(12);
		obList.add(p);
		ListView<Person> listView = new ListView<Person>(obList);
		
		
		listView.setPrefHeight(200);
		listView.setPrefWidth(200);
		listView.setFixedCellSize(30.00); // 设置单元格高度,每一行的高度
		listView.getSelectionModel().getSelectedItem(); // 获取选择的对象列表
		
		AnchorPane anchorPane = new AnchorPane();
		anchorPane.setPrefSize(300.00,300.00);
		listView.setPlaceholder(new Label("No data")); // 占位符,无数据时候展示的内容
		listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); //可多选,默认single
		//编辑列表操作
		listView.setEditable(true);//可编辑操作
		//listView.setCellFactory(TextFieldListCell.forListView());
		//cellfactory操作;自定义单元格
		//TextFieldListCell 表示是一个文本编辑框,可以更改为listCell的相关子类,
		//例如ComboxListCell 下拉列表等等类似的Cell
		//CheckBoxListCell
		listView.setCellFactory(TextFieldListCell.forListView(new StringConverter<Person>() {
			Person person = null;
			//数据输出
			@Override
			public String toString(Person object) {
				// TODO Auto-generated method stub
				System.out.println("sssss");
				person = object;
				return "姓名:"+ object.getNameString() + ",年龄:"+object.getAgeInteger();
			}

			//数据更新
			@Override
			public Person fromString(String string) {
				System.out.println("dddddd");
				// TODO Auto-generated method stub
				person.setNameString(string);
				return person;
			}
		}));
		anchorPane.getChildren().add(listView);
		AnchorPane.setLeftAnchor(listView, 50.00);
		AnchorPane.setTopAnchor(listView, 50.00);
		
		
		
		Scene scene = new Scene(anchorPane);
	
		primaryStage.setScene(scene);
		primaryStage.show();
	}

}


class Person {
	private String nameString;
	private Integer ageInteger;
	public String getNameString() {
		return nameString;
	}
	public void setNameString(String nameString) {
		this.nameString = nameString;
	}
	public Integer getAgeInteger() {
		return ageInteger;
	}
	public void setAgeInteger(Integer ageInteger) {
		this.ageInteger = ageInteger;
	}
	
	
	
	
}

如果是checkboxlistCell的写法如下

listView.setCellFactory(CheckBoxListCell.forListView(new Callback<Person, ObservableValue<Boolean>>() {

			//是否选中,第一个参数
			@Override
			public ObservableValue<Boolean> call(Person param) {
				// TODO Auto-generated method stub
				return null;
			}
		},new StringConverter<Person>() {
			//第二个参数数据输入输出转换
			Person person = null;
			//数据输出
			@Override
			public String toString(Person object) {
				// TODO Auto-generated method stub
				System.out.println("sssss");
				person = object;
				return "姓名:"+ object.getNameString() + ",年龄:"+object.getAgeInteger();
			}

			//数据更新
			@Override
			public Person fromString(String string) {
				System.out.println("dddddd");
				// TODO Auto-generated method stub
				person.setNameString(string);
				return person;
			}
		
		}));

自定义UI:

listView.setCellFactory(new Callback<ListView<Person>, ListCell<Person>>() {			
			@Override
			public ListCell<Person> call(ListView<Person> param) {
				//自定义UI
				ListCell<Person> listCell = new ListCell<Person>() {
					@Override
					protected void updateItem(Person item, boolean empty) {
						super.updateItem(item, empty);
						if(empty) {return ;}
						HBox hBox = new HBox(10);
						Button btn = new Button(item.getNameString());
						hBox.getChildren().add(btn);
						btn.setOnAction((e)->{
							System.out.println("info about e");
						});
						this.setGraphic(hBox);
					};
				};
				return listCell;
			}
		});		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值