【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的代码生成器的界面---有点丑:


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JList 是 Java Swing 组件中的一个列表组件,可以用来展示一组数据。以下是 JList 的用法: 1. 创建 JList 对象: ``` JList list = new JList(); ``` 2. 设置数据模型: JList 组件需要一个数据模型来存储数据,可以使用 DefaultListModel 类来创建数据模型: ``` DefaultListModel model = new DefaultListModel(); model.addElement("Item 1"); model.addElement("Item 2"); list.setModel(model); ``` 3. 设置显示样式: 可以通过设置 ListCellRenderer 对象来改变每个列表项的显示样式: ``` list.setCellRenderer(new MyListRenderer()); ``` 4. 添加到容器中: 将 JList 添加到容器中即可显示出来: ``` JScrollPane scrollPane = new JScrollPane(list); frame.getContentPane().add(scrollPane); ``` 完整示例代码: ``` import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.ListCellRenderer; public class MyListRenderer implements ListCellRenderer<String> { public static void main(String[] args) { JFrame frame = new JFrame(); JList<String> list = new JList<String>(); DefaultListModel<String> model = new DefaultListModel<String>(); model.addElement("Item 1"); model.addElement("Item 2"); list.setModel(model); list.setCellRenderer(new MyListRenderer()); JScrollPane scrollPane = new JScrollPane(list); frame.getContentPane().add(scrollPane); frame.pack(); frame.setVisible(true); } public MyListRenderer() { } @Override public Component getListCellRendererComponent(JList<? extends String> list, String value, int index, boolean isSelected, boolean cellHasFocus) { JLabel label = new JLabel(); label.setText(value); if (isSelected) { label.setBackground(list.getSelectionBackground()); label.setForeground(list.getSelectionForeground()); } else { label.setBackground(list.getBackground()); label.setForeground(list.getForeground()); } label.setOpaque(true); return label; } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值