`
lj_gzy2014
  • 浏览: 18142 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Jlist的使用

    博客分类:
  • java
 
阅读更多

               以前对JList不大了解,只知道显示固定的数据,今天特地的看了一下JList的API,基本弄懂了JList的用法,可以实现JList的动态更新和图片加载。

      这是主类

package jlist_v1;

import java.awt.BorderLayout;

public class MyJistText extends JFrame {

	private JPanel contentPane;
	private JLabel label;
	private JList list;
    private Vector<Object>  dataVec;
    private JList< Object> list2;
    private int count=1;
    private JComboBox comboBox;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					MyJistText frame = new MyJistText();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public MyJistText() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JScrollPane scrollPane = new JScrollPane();
		contentPane.add(scrollPane, BorderLayout.WEST);
		String[] words= { "quick", "brown", "hungry", "wild"};
		list = new JList(words);
		list.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				
				if(e.getClickCount()==2){
					//得到双击的item的index
					 int index = list.locationToIndex(e.getPoint());
		             System.out.println("Double clicked on Item " + index);
		             	//实现list2的动态更新
					dataVec.addElement(""+count++);
					list2.setModel(new StringListModel(dataVec));
					
				}
			}
		});
		scrollPane.setViewportView(list);
		//list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
	//	list.setVisibleRowCount(2);//设置可见的行数
	//	list.setCellRenderer(new FontCellRenderer());
		list.setCellRenderer(new MyCellRenderer());
		list.addListSelectionListener(new ListSelectionListener() {
			@Override
			public void valueChanged(ListSelectionEvent e) {
				boolean flag=e.getValueIsAdjusting();
				int last=e.getLastIndex();
				if(flag){System.out.println("按下"+last);}
				else{
					 System.out.println("松开"+last);
				     System.out.println(list.getSelectedValue());
				     label.setText(list.getSelectedValue().toString());
				}
			
			
			}
		});
		dataVec=new Vector<Object>();
		dataVec.add("100");
		list2=new JList<Object>();
		list2.setModel(new StringListModel(dataVec));
		JScrollPane scrollPane_1 = new JScrollPane(list2);
		contentPane.add(scrollPane_1, BorderLayout.EAST);
		
		label = new JLabel("");
		contentPane.add(label, BorderLayout.SOUTH);
		
		comboBox = new JComboBox(words);
		comboBox.addItemListener(new ItemListener() {
			
			@Override
			public void itemStateChanged(ItemEvent e) {
				System.out.println(comboBox.getItemAt(comboBox.getSelectedIndex()));
			}
		});
		
		contentPane.add(comboBox, BorderLayout.NORTH);
		
		
	}

}

 要实现JList的动态更新,需要实现ListModel接口

class StringListModel implements ListModel
{
	
	private Vector<Object> dataVec;
	

	public StringListModel(Vector<Object> dataVec) {
		super();
		this.dataVec = dataVec;
	}

	@Override
	public int getSize() {
		return dataVec.size();
	}

	@Override
	public Object getElementAt(int index) {
		return dataVec.elementAt(index);
	}

	@Override
	public void addListDataListener(ListDataListener l) {
	}

	@Override
	public void removeListDataListener(ListDataListener l) {
	}
  
 
}

 

要实现JList元素的特殊效果,如加载图片,背景颜色设置,需要实现ListCellRenderer接口

class MyCellRenderer extends JLabel implements ListCellRenderer {
     final static ImageIcon longIcon = new ImageIcon("images/qq.png");
     final static ImageIcon shortIcon = new ImageIcon("images/weixin.png");
     
     public Component getListCellRendererComponent(
       JList list,              // the list
       Object value,            // value to display
       int index,               // cell index
       boolean isSelected,      // is the cell selected
       boolean cellHasFocus)    // does the cell have focus
     {
         String s = value.toString();
         setText(s);
         setIcon((s.length()>5) ? longIcon : shortIcon);
         if (isSelected) {
             setBackground(Color.CYAN);
             setForeground(list.getSelectionForeground());
         } else {
             setBackground(list.getBackground());
             setForeground(list.getForeground());
         }
         setEnabled(list.isEnabled());
         setFont(list.getFont());
         setOpaque(true);
         return this;
     }
 }

          这些在api中都有相应的范例,不做过多介绍,只不过,通过对JTABLE,JLIST和JCOMBOBOX的研究发现,其动态更新都需要实现相应的model,更改外观都需要实现相应的渲染器,这些组件都采用了MVC架构,知道这一点,对于其他组件的学习就容易多了。

 

分享到:
评论

相关推荐

    JAVA JList使用例子

    本篇将深入探讨如何使用`JList`以及如何为其添加滚动条。 首先,`JList`可以通过传入一个字符串数组来初始化其内容。例如,我们可以创建一个包含若干元素的数组,然后将其作为参数传递给`JList`的构造函数: ```...

    JLIST使用,JLIST应用例子,移动举例

    jlist应用例子,JLIST应用例子,移动举例

    JList中使用JCheckBox示例

    总的来说,这个示例展示了如何在`JList`中使用`JCheckBox`,提供了一种更直观的多选方式。通过自定义`ListModel`、渲染器和鼠标监听器,我们可以使`JList`具有勾选功能,从而增强用户界面的交互性。这在创建GUI应用...

    JList动态改变图片

    在Java Swing库中,`JList`是一个常用的组件,用于展示一系列...记得在实际项目中,要考虑到性能优化,比如预加载策略、使用缩略图等,以确保用户体验流畅。同时,也可以考虑添加动画效果,使得图片切换更为平滑自然。

    javaswing更酷的Jlist.pdf

    本文将介绍如何使用 JavaSwing 中的 ListCellRenderer 接口来自定义 JList 组件的外观。 一、ListCellRenderer 接口 ListCellRenderer 接口是 JavaSwing 中的一个重要接口,用于自定义 JList 和 JComboBox 组件的...

    图片+文字的Jlist

    创建了自定义的渲染器后,将其设置到`JList`上,使用`jList.setCellRenderer(customRenderer)`。 5. **加载和显示图片**: 图片通常存储在文件系统或资源包中。使用`ImageIcon`可以从指定路径加载图片,然后将其...

    JList的一些用法

    ### JList在Java中的应用与特性详解 #### 引言 在Java的Swing图形用户界面库中,`JList`组件提供了展示列表项的强大功能,不仅能够支持单列或多列显示,还提供了丰富的事件处理机制,使得它成为构建用户交互界面时...

    java构建几种个性的JList

    本篇文章将深入探讨如何使用Java构建具有各种特性的`JList`,包括添加图片、实现拖放功能以及自定义外观等。我们将通过以下五个主题来展开讨论: 1. **添加图片到JList** 在`JList`中添加图片,可以使用户界面更加...

    JList 上下左右拖动

    首先,`JList`的基本使用包括创建`DefaultListModel`来存储列表项,然后将该模型赋值给`JList`。例如: ```java DefaultListModel&lt;String&gt; model = new DefaultListModel(); model.addElement("项1"); model....

    swing中jlist点击事件demo

    swing中的jlist 代码中定义了两个jlist 从一个jlist双击列表项可以将该项从这个列表删除并添加至另外一个列表中去

    JList example

    在这个例子中,我们将深入探讨`JList` 的使用方法,并结合给出的`List.java`文件来解析其关键知识点。 首先,`JList` 是javax.swing包中的类,它继承自`JComponent`,并实现了`ListModel`接口。`ListModel` 是`...

    JList的使作

    JLIst的使用,主要是介绍基础

    JList事件监听器的实现例子

    这就涉及到事件监听器的使用。本教程将详细解释如何在`JList`上实现事件监听器,以及`ListModelTest`这个示例代码是如何工作的。 首先,我们需要了解`JList`中的两种主要事件类型:`ListSelectionEvent`和`...

    java_swing_更酷的Jlist.

    对于那些希望为列表增加更多视觉元素(如图片)的应用程序来说,使用 `ListCellRenderer` 接口可以大大增强 `JList` 的表现力。本文将详细介绍如何使用 `ListCellRenderer` 来创建一个更加美观且功能丰富的 `JList` ...

    JList多选值的获取

    ### JList多选值的获取 #### 概述 在Java Swing中,`JList` 组件被广泛用于创建用户界面中的列表框。不同于选择框(通常指`JComboBox`),`JList` 支持多种选择模式,使得用户能够灵活地进行单选或多选操作。本文...

    Java Swing组件:Jlist学习笔记

    使用一个 `Object[]` 或 `Vector&lt;?&gt;` 构造 JList 实例,这适用于列表项数量较少且固定的情况。 ```java // 通过 Object[] 初始化 String[] items = {"选项1", "选项2", "选项3"}; JList&lt;String&gt; list1 = new ...

    JList的使用

    文档中介绍了JList控件的简单使用方法,包括对列表点击事件的处理。

    JList点击空白处不让其选中最后一项

    在Java Swing中,`JList` 是一个常用的组件,用于展示一系列可选择的项。当用户点击`JList`的空白区域时,默认行为是选中列表的最后一项。这对于某些应用场景,比如带有右键菜单的界面,可能会带来不便,因为用户...

    自定义JList

    最后,创建`MyListDemo`示例类,用于展示如何使用自定义`JList`。在这个类中,你可以加载初始数据,设置事件监听,以及处理用户与列表的交互。 ```java public class MyListDemo { public static void main(String...

    JFC Swing活学活用系列之定制JList显示.rar

    JList默认使用DefaultListCellRenderer,但我们可以创建一个继承自DefaultListCellRenderer的子类,并重写其`getListCellRendererComponent`方法,以此来定制每个单元格的显示。在这个方法中,你可以设置文本、图标...

Global site tag (gtag.js) - Google Analytics