java - Unable to get each item from selected multiple line Jlist? -
after doing lots of research still unable items selected multiple line jlist. here code listselectionlistener:
list.addlistselectionlistener(new listselectionlistener() { public void valuechanged(listselectionevent e) { listmodel model = list.getmodel(); for(int i=0; < model.getsize(); i++){ system.out.println( model.getelementat(i)); } } });
i added button print selected items:
btnnewbutton.addmouselistener(new mouseadapter() { @override public void mouseclicked(mouseevent e) { listmodel model = list.getmodel(); for(int i=0; < model.getsize(); i++){ system.out.println( model.getelementat(i)); } } });
but still getting same output :
com.example.main.student@c36b5fb com.example.main.student@2e61eb2 com.example.main.student@151f708e com.example.main.student@563e55b0
i expecting output "name: paul0 age: 0." tried adding defaultlistmodel instead of listmodel output same. please want each item inside selected line.i using jdk8. below complete working code.
import java.awt.component; import javax.swing.defaultlistcellrenderer; import javax.swing.defaultlistmodel; import javax.swing.jframe; import javax.swing.jlist; import javax.swing.listmodel; import javax.swing.swingutilities; import javax.swing.jbutton; import java.awt.borderlayout; import javax.swing.event.listselectionlistener; import javax.swing.event.listselectionevent; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; public class test3 { jlist<student> list; defaultlistmodel model; public test3() { list = new jlist(); list.addlistselectionlistener(new listselectionlistener() { public void valuechanged(listselectionevent e) { listmodel model = list.getmodel(); for(int i=0; < model.getsize(); i++){ system.out.println( model.getelementat(i)); } } }); model = new defaultlistmodel(); (int = 0; < 10; i++) { model.addelement(new student("paul" + i, i)); } list.setmodel(model); list.setcellrenderer(new mylistcellrenderer()); jframe frame = new jframe("test"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.getcontentpane().add(list); jbutton btnnewbutton = new jbutton("print"); btnnewbutton.addmouselistener(new mouseadapter() { @override public void mouseclicked(mouseevent e) { listmodel model = list.getmodel(); for(int i=0; < model.getsize(); i++){ system.out.println( model.getelementat(i)); } } }); frame.getcontentpane().add(btnnewbutton, borderlayout.north); frame.pack(); frame.setvisible(true); } public static void main(string[] args) { swingutilities.invokelater(new runnable() { public void run() { new test3(); } }); } private class mylistcellrenderer extends defaultlistcellrenderer { @override public component getlistcellrenderercomponent( jlist list, object value, int index, boolean isselected, boolean cellhasfocus) { super.getlistcellrenderercomponent(list, value, index, isselected, cellhasfocus); student label = (student) value; string name = label.getname(); int age = label.getage(); string labeltext = "<html>name: " + name + "<br/>age: " + age; settext(labeltext); return this; } } } class student { string name; int age; public student(string name, int age) { this.name = name; this.age = age; } public string getname() { return name; } public int getage() { return age; } }
getelementat
returning object
@ specified position, happens student
in case. system.out.println
using object's tostring
method print object, so, based on code, seems working.
but, if want output of "name: paul0 age: 0."
, need change student
class , override tostring
method meet requirements
class student { string name; int age; public student(string name, int age) { this.name = name; this.age = age; } public string getname() { return name; } public int getage() { return age; } public string tostring() { return "name: " + getname() + " age: " + getage()); } }
or that
you might want take @ jlist#getselectedvalueslist
list
of items user has selected (but might misinterrupting question)
you have @ object superclass (look section called "the tostring() method") more details
Comments
Post a Comment