javaFx ListView基础

11 篇文章 1 订阅

注释在代码中:

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;
			}
		});		

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要美化JavaFX ListView,你可以使用CSS样式来自定义ListView的外观。首先,你可以使用setFocusTraversable()方法将焦点设置为可遍历,以便在ListView上使用键盘导航。\[1\] 然后,你可以在CSS文件中为ListView及其内部的ListCell设置样式。你可以使用类选择器来选择ListView和ListCell,并为它们设置背景颜色、边框颜色和宽度等属性。\[2\] 例如,你可以使用以下CSS代码为ListView设置整体样式: ```css #ListView_log{ -fx-background-color: #fafdff; -fx-background-radius: 10; -fx-border-radius: 10; -fx-border-color: rgb(215, 215, 215); -fx-border-width: 1.5; } ``` 你还可以为ListCell设置样式,例如设置背景颜色: ```css #ListView_log .list-cell{ -fx-background-color: #fafdff; } ``` 如果你想为选中的ListCell设置不同的样式,你可以使用:selected伪类选择器。例如,你可以为选中的ListCell设置与未选中一样的样式: ```css #ListView_log .list-cell:selected { -fx-background-color: #fafdff; } ``` 如果你想为选中时的ListCell中的Label设置特定的样式,你可以使用ID选择器。例如,你可以为选中时的Label设置黑色文本颜色: ```css #ListView_log .list-cell:selected #Labelname { -fx-text-fill: black; } ``` 通过在FXML文件中为ListView添加样式类名,然后在样式表中使用相同的样式类名,你可以在整个应用程序中应用相同的样式。\[3\] 希望这些信息对你有帮助! #### 引用[.reference_title] - *1* *2* [JavaFx 美化 ListView,并使内部控件(Label等)可以点击](https://blog.csdn.net/m0_53410100/article/details/127678587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [使用CSS来美化你的javafx滚动条](https://blog.csdn.net/weixin_39646706/article/details/114518740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值