请教一个关于Jlist(swing)的问题 小弟用swing的jlist编程来实现一个列表展示项目现在发现只能放name或者放ID,任意一个作为显示能不能实现显示name,但是当我getselectvalue的时候取到的就是显示项的ID呢谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用一個hashmap 把你的數據 放進去 根據選擇的jlist的選項 到hashmap里面去取相對應的值 就可以了 name -- ID 感谢楼上的,这种方法效果是实现了但需要在haspmap重新查询一次,当haspmap数据多的时候会不会速度慢,这个我没测试,还不知道我主要是想实现.net的那种list的功能,点list的项就可以取到对应的ID,一次性就完成,不用查询第2次 前几天写了一次,Copy过来,希望对你有帮助package test;import java.awt.BorderLayout;import java.awt.Component;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.ArrayList;import java.util.List;import javax.swing.DefaultListModel;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JTextArea;import javax.swing.ListCellRenderer;public class Test extends JFrame{ private JList list; private DefaultListModel model; private JTextArea area; public Test(){ //生成List,使用自定义CellRenderer model = new DefaultListModel(); list = new JList(model); list.setCellRenderer(new PersonListCell()); for(Person p:initData()){ model.addElement(p); } //TextArea显示数据 area = new JTextArea(); //布局 this.add(list,BorderLayout.WEST); this.add(area,BorderLayout.CENTER); this.setSize(400,300); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //事件监听 list.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { int index = list.locationToIndex(e.getPoint()); Person p = (Person)model.getElementAt(index); //鼠标双击 if (e.getClickCount() == 2) { area.setText("编号:"+p.getId()+"\t姓名:"+p.getName()+"\t年龄:"+p.getAge()); } } }); } /** * 模拟从数据库读取数据,并封装成Person的集合 * @return */ private List<Person> initData(){ List<Person> list = new ArrayList<Person>(); for(int i=0;i<10;i++){ list.add(new Person("Tom"+i,i,i+1000L)); } return list; } /** * main * @param args */ public static void main(String[] args) { new Test(); }}/** * 自定义CellRenderer,指定List加入的元素为Person类型 * @author Declan * */class PersonListCell extends JLabel implements ListCellRenderer{ public Component getListCellRendererComponent(JList list, Object value, int index, boolean sel, boolean foc) { Person p = (Person) value; //设置List上显示的是Person的name属性 setText(p.getName()); if (sel) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } setEnabled(list.isEnabled()); setFont(list.getFont()); setOpaque(true); return this; }}/** * 封装Person对象 * @author Declan * */class Person { private String name; private int age; private Long id; public Person() { super(); } public Person(String name, int age, Long id) { super(); this.name = name; this.age = age; this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } } jlist里的元素是可以放object的呀,所以,你只要写个简单的bean,包含id,name属性,然后重载toString()方法,把name返回,然后在getselected的时候把id拿出来就可以了,如class Item{ private String id; private String name; ..... public String toString(){ return getName(); }}然后Item item = (Item) list.getSelected...;item.getId(); 感谢4楼的,我后来也是你这样做的...重写了toString()方法3楼朋友的也可以,效果看起更好些谢谢,问题已经解决了,今天来论坛才发现3,4楼朋友的方法呵呵 怎么保存对数据库的修改 HttpClient长连接的问题 如果有很多文件时调用File. listFiles 会不会有什么问题? java编程思想的内容 关于BigDecimal四舍五入问题?超难动作?请超级高手回答?我身边的人问到了,无人能解释原因!高分悬赏。 编码问题请指教 [300分]在下在做一款巡更系统,出现一个难点:怎样访问地机的串口资源,在线等 SCJP的模拟题 如何利用多线程实现Socket和SocketServer的通话? 归并排序出现空指向异常 数据写入Excel表中 弱弱的一问
但需要在haspmap重新查询一次,当haspmap数据多的时候会不会速度慢,这个我没测试,还不知道
我主要是想实现.net的那种list的功能,点list的项就可以取到对应的ID,一次性就完成,不用查询第2次
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTextArea;
import javax.swing.ListCellRenderer;public class Test extends JFrame{
private JList list;
private DefaultListModel model;
private JTextArea area;
public Test(){
//生成List,使用自定义CellRenderer
model = new DefaultListModel();
list = new JList(model);
list.setCellRenderer(new PersonListCell());
for(Person p:initData()){
model.addElement(p);
}
//TextArea显示数据
area = new JTextArea();
//布局
this.add(list,BorderLayout.WEST);
this.add(area,BorderLayout.CENTER);
this.setSize(400,300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//事件监听
list.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int index = list.locationToIndex(e.getPoint());
Person p = (Person)model.getElementAt(index);
//鼠标双击
if (e.getClickCount() == 2) {
area.setText("编号:"+p.getId()+"\t姓名:"+p.getName()+"\t年龄:"+p.getAge());
}
}
});
}
/**
* 模拟从数据库读取数据,并封装成Person的集合
* @return
*/
private List<Person> initData(){
List<Person> list = new ArrayList<Person>();
for(int i=0;i<10;i++){
list.add(new Person("Tom"+i,i,i+1000L));
}
return list;
}
/**
* main
* @param args
*/
public static void main(String[] args) {
new Test();
}
}
/**
* 自定义CellRenderer,指定List加入的元素为Person类型
* @author Declan
*
*/
class PersonListCell extends JLabel implements ListCellRenderer{
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean sel, boolean foc) {
Person p = (Person) value;
//设置List上显示的是Person的name属性
setText(p.getName());
if (sel) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setEnabled(list.isEnabled());
setFont(list.getFont());
setOpaque(true);
return this;
}
}
/**
* 封装Person对象
* @author Declan
*
*/
class Person {
private String name;
private int age;
private Long id;
public Person() {
super();
}
public Person(String name, int age, Long id) {
super();
this.name = name;
this.age = age;
this.id = id;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
private String id;
private String name; ..... public String toString(){
return getName();
}
}然后Item item = (Item) list.getSelected...;
item.getId();
3楼朋友的也可以,效果看起更好些
谢谢,问题已经解决了,今天来论坛才发现3,4楼朋友的方法
呵呵