欢迎您访问 marker 的雨林博客,我将与您分享最新最火的技术!
RSS订阅 by 雨林博客
加入收藏 设为首页  

JavaFX ComboBox组件显示数据

发布时间: 13-07-08 05:18:33
     
分类:Java编程
( 0 ) 评论
   /   
( 1035 ) 阅读

JavaFX中使用ComboBox组件还算是比较简单,它提供的各种组件,涉及到数据的大部分组件能能使用泛型来指定组件绑定某个对象,而显示数据则会调用对象的toString()方法,如果你使用对象作为Items,那么数据显示将会是形如这样

com.lovo.crm.bean.Department@15093f1

 

 

言归正传,要加载数据到ComboBox,首先要转换集合对象为ObservableList<?> 类型。当然这个类型转换JavaFX提供专门的类来使用FXCollections类,这个点像我们Javautil包下面的Collections

 

具体代码实现:

 

比如我们现在已经创建了ComboBox对象名为depItem

(这里我得说明下departmentService.findAll()是由服务层提供的查询方法,能得到Department对象的List集合

 ComboBox<Department> depItem = new ComboBox<Department>();

ObservableList<Department> items = FXCollections.observableArrayList (departmentService.findAll());

depItem.setItems(items);//设置ComboBox的选择数据

depItem.getSelectionModel().select(0);//设置选择第一个


上面我遗留了一个数据显示问题,我们在使用对象的时候,要正确显示数据,解决办法有两个:

【1.】 重写对象的toString()方法。


【2.】创建CellFactory,也就是单元格重写

/** CallBack */
	public static Callback<ListView<Department>, ListCell<Department>> CITY_CALLBACK = new Callback<ListView<Department>, ListCell<Department>>() {
		@Override
		public ListCell<Department> call(ListView<Department> list) { 
			return new ListCell<City>(){
				@Override
				protected void updateItem(City dep, boolean empty) { 
					super.updateItem(dep, empty);
		            Label rect = new Label();
		            if (city != null) {
		            	rect.setText(dep.getName());
		                setGraphic(rect);
		            }
				}
			};
		}
    };

创建一个这个对象,这个对象的作用就是重新渲染数据,然后调用ComboBox对象的setCellFactory( Callback对象 )方法。


FROM : 雨林博客

文章评论