【swing】关于swing里面的jlist的绑定,美化,获取选中项等

【前言】

我再次捡起swing,因为跨平台,低成本---并非说开发成本,而是说配套使用的服务器,数据库,开发工具等成本,这方面微软是力有不及。

然后搞了一个代码生成器的界面----假如您看了前面的文章的话,您一定会对代码生成器这个词语非常熟悉,对,我就是在各种平台各个语言下面不停造轮子,不停搞代码生成器。

【JLIst】


因为需要显示常用的数据库连接给用户进行选择,并且需要改一改样式----swing本身的样式无论任何时候看都觉得丑陋,所以也需要改写单元格了,下面说明jlist的使用方式。


jlist是 m v c 分离方式的,它有一个模型列表数据,然后有自己默认的渲染方式。

下面说明用法:

	 ConnectionDAL cDal=new ConnectionDAL();
		 List<ConnectionModel> modelList=  cDal.getList();
		 //定义一个默认的模型列表,它已经帮我们实现了属性改变等事件了,
		 //然后在里面放进去我们需要的数据。
		 _dbModelList=new DefaultListModel<DBRecordInfo>();
		 for(ConnectionModel ctmp : modelList) {
			 
			 DBRecordInfo iinfoInfo=new DBRecordInfo();
			 iinfoInfo.recordId=ctmp.id;
			 iinfoInfo.name=ctmp.title;
			 iinfoInfo.dbtype=ctmp.dbtype;
			 _dbModelList.addElement(iinfoInfo);			
			 
		 }
		 //设定模型为我们刚刚定义好的模型列表
		 _dbList.setModel(_dbModelList);
		 //我们改写了默认的显示方式
		 _dbList.setCellRenderer(new dbListCell());
		 //定义这个JList的鼠标事件
		 _dbList.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				DBRecordInfo selectedInfo=(DBRecordInfo)_dbList.getSelectedValue();
				
				_BindTreeList();
			}
		});

		
		

上面的步骤总结为:

1、定义一个实体类,用于承载需要显示的数据,然后定义默认的listmodel,放进去;

2、自定义jlist的单元格显示方式;

3、定义jlist的鼠标事件。


【1、模型】

	 /**
	  * 针对db list的模型
	  * */
	 class DBRecordInfo{
		 public String name;
		 public int recordId;
		 public String dbtype="";
		 public String toString(){
			 return this.name+"【"+dbtype+"】";
		 }
		 
	 }

上面就是模型了,我通过读取写入sqlite数据库来更新,保存或者获得用户输入的连接方式,然后赋值给这个实体类,再添加进listmodel,比起wpf的绑定有很大距离,一个简单的事情搞复杂了。

【2、自定义渲染方式】

	 /**
	  * 定制swing里面dblist的cell单元格如何显示
	  * */
	 class dbListCell extends JLabel implements ListCellRenderer<DBRecordInfo>{
     public ImageIcon _bgIcon;
		@Override
		public Component getListCellRendererComponent(
				JList<? extends DBRecordInfo> list, DBRecordInfo value,
				int index, boolean isSelected, boolean cellHasFocus) {
			_bgIcon= appConfig.getResourceIcon("database_icon.png", 32, 32);
			setText(value.name+"("+value.dbtype+")");
			setIcon(_bgIcon);
			//判断是否选中
			if (isSelected) {
	             setBackground(list.getSelectionBackground());
	               setForeground(list.getSelectionForeground());
	           }
	         else {
	               setBackground(list.getBackground());
	               setForeground(list.getForeground());
	           }
	           setEnabled(list.isEnabled());
	           setFont(list.getFont());
	         setOpaque(true);
			return this;
		}
		 
	 }

值得注意的是,在定制的时候,我们需要分别对是否选中的情况进行区别处理,譬如:选中的时候背景颜色不一样等等。


【3、鼠标点击事件】

刚才已经将点击事件贴出来,现在看看如何处理:

				DBRecordInfo selectedInfo=(DBRecordInfo)_dbList.getSelectedValue();
				
				_BindTreeList();

注意:我们可以用强制转换的方式来获得选中的记录,至于下面的方法是另一个环节了,那就是jtree的用法。

下面附上swing的代码生成器的界面---有点丑:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值