`
dearhit
  • 浏览: 789 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

貌似是jlist的bug

阅读更多
如例子代码中所示,对于jlist,第一次往model中addelement时正常,然后默认选中list中的第一条,第二次点击fresh时,程序先把model clear后再往里面addelement,这时速度就会非常慢,而如果默认选中的不是第一天记录,addelement就会正常,大家有遇到过这种情况的吗?


public class TestJList extends JFrame {
	private static final long serialVersionUID = 1L;
	JButton fresh = new JButton("fresh");
	JScrollPane jsp = new JScrollPane();
	JPanel panel = new JPanel();;
	DefaultListModel model = new DefaultListModel();
	Runnable runnable = null;
	Thread t = null;
	JList list = new JList(model);

	private TestJList() {
		init();
	}

	void init() {
		this.setTitle("JList test");
		this.setSize(300, 200);
		loadData();

		panel.setLayout(new BorderLayout());
		fresh.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				loadData();
			}
		});
		panel.add(fresh, BorderLayout.NORTH);

		jsp.getViewport().setView(list);
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		list.addListSelectionListener(new ListSelectionListener() {
			public void valueChanged(ListSelectionEvent e) {
				System.out.println("the item you have selected is :"
						+ e.getLastIndex());
			}
		});
		panel.add(jsp, BorderLayout.CENTER);

		this.getContentPane().add(panel);
		this.setVisible(true);
		this.pack();
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	void loadData() {
		fresh.setEnabled(false);
		if (model.size() != 0) {
			model.clear();
		}
		runnable = new Runnable() {
			public void run() {
				for (int i = 0; i < 1000; i++) {
					model.addElement("hello world:" + i);
				}
				list.setSelectionInterval(0, 0);
				SwingUtilities.invokeLater(new Runnable() {
					public void run() {
						fresh.setEnabled(true);
					}
				});
			}
		};
		SwingUtilities.invokeLater(runnable);
	}

	public static void main(String[] args) {
		new TestJList();
	}
}
分享到:
评论
2 楼 dearhit 2009-05-13  
恩 估计就是在这块出的问题,执行clear后,有的selectlistener没有被清除
1 楼 runshine 2009-05-13  
出现这种情况的原因初步测试是因为若被选中的第一条即"hello world:0",点fresh时,每一次model.addElement都会触发一次ListSelectionEvent,但是若选中的不是第一条,就只在最后触发一次...所以效率上差别很大

具体为什么出现了这种情况,继续分析中...

相关推荐

    JList动态改变图片

    在Java Swing库中,`JList`是一个常用的组件,用于展示一系列可选择的项。在这个特定的情况下,我们探讨的是如何利用`JList`来显示图片,并实现这些图片的动态变化。这在创建图像库、画廊应用或者进行图形用户界面...

    JList的一些用法

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

    javaswing更酷的Jlist.pdf

    JavaSwing 中的 JList 组件自定义渲染器 JavaSwing 是一个功能强大且灵活的 GUI 组件库,提供了许多自定义组件的方式。JList 是其中的一个重要组件,用于显示列表数据。但是,JList 的默认外观并不美观,如何...

    图片+文字的Jlist

    在Java编程中,`JList` 是Swing组件库中的一个关键部分,它用于展示一系列的选项或元素供用户选择。在默认情况下,`JList` 只能显示字符串元素,但通过自定义渲染器(CellRenderer),我们可以扩展其功能以显示更...

    JAVA JList使用例子

    在Java Swing库中,`JList`是一个非常重要的组件,用于显示一组可选择的项。在GUI应用程序中,它常用于展示列表数据,允许用户进行单选或多选操作。本篇将深入探讨如何使用`JList`以及如何为其添加滚动条。 首先,`...

    swing中jlist点击事件demo

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

    JList 上下左右拖动

    在Java Swing库中,`JList`是一个常用的组件,用于展示一系列可选择的项。它在用户界面设计中常用于创建列表视图,允许用户通过单击或键盘导航来选择项目。在本教程中,我们将深入探讨如何实现`JList`的上下左右拖动...

    JList example

    在Java编程语言中,`JList` 是Swing库中的一个组件,用于显示一组可选择的项目。`JList` 可以用作单选或多选列表,常用于创建下拉菜单、列表视图等用户界面元素。在这个例子中,我们将深入探讨`JList` 的使用方法,...

    java构建几种个性的JList

    在Java编程中,`JList` 是Swing组件库中的一个关键部分,它用于展示一系列选项,用户可以选择其中的一个或多个。本篇文章将深入探讨如何使用Java构建具有各种特性的`JList`,包括添加图片、实现拖放功能以及自定义...

    JList中使用JCheckBox示例

    在Java Swing库中,`JList`是一个常用的组件,用于展示一系列可选择的项。它通常用于用户需要从多个选项中进行单选或多选的场景。在这个示例中,我们将探讨如何在`JList`中集成`JCheckBox`,使得用户能够通过勾选复...

    JList事件监听器的实现例子

    在Java Swing库中,`JList`是一个非常重要的组件,用于显示一组可选择的项。在用户与`JList`进行交互时,如选择、取消选择等操作,我们可能需要捕获这些事件并做出响应。这就涉及到事件监听器的使用。本教程将详细...

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

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

    JList的使作

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

    JList多选值的获取

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

    java_swing_更酷的Jlist.

    ### Java Swing 更酷的 JList:实现列表项带有图片标签 在Java Swing中,`JList` 是一个非常有用的组件,用于展示一个可滚动的列表。对于那些希望为列表增加更多视觉元素(如图片)的应用程序来说,使用 `...

    自定义JList

    在Java Swing库中,`JList`是一个常用的组件,用于展示一系列可选择的项。然而,标准的`JList`功能有限,有时我们需要对其进行自定义,以满足特定的应用场景需求,比如实现类似Android中`ListView`的效果。在这个...

    Java Swing组件:Jlist学习笔记

    ### Java Swing 组件:JList 学习笔记 #### JList 概述 JList 是 Java Swing 中的一个重要组件,用于展示列表项。它能够帮助开发者实现数据的动态展示、编辑以及选择等功能,广泛应用于各种桌面应用软件界面设计中...

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

    本资料“JFC Swing活学活用系列之定制JList显示”聚焦于如何利用Swing中的JList组件来实现自定义的显示效果。 JList是一个可滚动的组件,允许用户从一系列选项中进行选择。默认情况下,JList会按照字符串形式展示...

    用JComboBox和JList实现的一个文件浏览器组件

    在Java Swing中,`JComboBox`和`JList`是两种常用的用户界面组件,用于创建交互式的下拉列表和多选列表。在这个“文件浏览器组件”中,它们被巧妙地结合在一起,为用户提供了一个功能丰富的文件浏览和选择的界面。这...

    swing JList 拖拽

    swing JList 拖拽记录到 JTable

Global site tag (gtag.js) - Google Analytics