java 生成顺序列表_Java Swing - 如何为JList创建排序列表模型

本文介绍如何在Java Swing中为JList组件创建一个排序列表模型。通过使用`SortedListModel`扩展`AbstractListModel`,并结合`TreeSet`实现元素的自动排序。示例代码展示了一个基于`Properties`的JList,鼠标悬停时显示属性的提示信息。
摘要由CSDN通过智能技术生成

/*

Definitive Guide to Swing for Java 2, Second Edition

By John Zukowski

ISBN: 1-893115-78-X

Publisher: APress

*/

import java.awt.Point;

import java.awt.event.MouseEvent;

import java.util.Arrays;

import java.util.Collection;

import java.util.Enumeration;

import java.util.Iterator;

import java.util.Properties;

import java.util.SortedSet;

import java.util.TreeSet;

import javax.swing.AbstractListModel;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JScrollPane;

import javax.swing.ToolTipManager;

public class Main{

public static void main(String args[]) {

JFrame frame = new JFrame("Custom Tip Demo");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Properties props = System.getProperties();

PropertiesList list = new PropertiesList(props);

JScrollPane scrollPane = new JScrollPane(list);

frame.getContentPane().add(scrollPane);

frame.setSize(300, 300);

frame.setVisible(true);

}

}

class PropertiesList extends JList {

SortedListModel model;

Properties tipProps;

public PropertiesList(Properties props) {

model = new SortedListModel();

setModel(model);

ToolTipManager.sharedInstance().registerComponent(this);

tipProps = props;

addProperties(props);

}

private void addProperties(Properties props) {

// Load

Enumeration e = props.propertyNames();

while (e.hasMoreElements()) {

model.add(e.nextElement());

}

}

public String getToolTipText(MouseEvent event) {

Point p = event.getPoint();

int location = locationToIndex(p);

String key = (String) model.getElementAt(location);

String tip = tipProps.getProperty(key);

return tip;

}

}

class SortedListModel extends AbstractListModel {

SortedSet model;

public SortedListModel() {

model = new TreeSet();

}

public int getSize() {

return model.size();

}

public Object getElementAt(int index) {

return model.toArray()[index];

}

public void add(Object element) {

if (model.add(element)) {

fireContentsChanged(this, 0, getSize());

}

}

public void addAll(Object elements[]) {

Collection c = Arrays.asList(elements);

model.addAll(c);

fireContentsChanged(this, 0, getSize());

}

public void clear() {

model.clear();

fireContentsChanged(this, 0, getSize());

}

public boolean contains(Object element) {

return model.contains(element);

}

public Object firstElement() {

return model.first();

}

public Iterator iterator() {

return model.iterator();

}

public Object lastElement() {

return model.last();

}

public boolean removeElement(Object element) {

boolean removed = model.remove(element);

if (removed) {

fireContentsChanged(this, 0, getSize());

}

return removed;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值