swing - Java - How to show an input dialog having a dropdown list with an icon for each item? -
i using java code in swing application show input dialog has drop-down selection list user can select item list :
string[] carmodelsarray = { "honda", "mitsubishi", "toyota" }; string selectedvalue = (string)joptionpane.showinputdialog( null, "select car model list below:", "car model...", joptionpane.question_message, null, carmodelsarray, carmodelsarray[ 0 ] );
this code works fine, wondering if can add icon each item in selection list, drop-down selection list appear :
i have tried set items in list jlabel items, jlabel objects converted string values when rendered inside drop-down list if calls jlabel.tostring() method each item in list value.
so there way accomplish ?
short answer, not way you're doing it. long answer, more like...
import java.awt.component; import java.awt.eventqueue; import javax.swing.defaultcomboboxmodel; import javax.swing.defaultlistcellrenderer; import javax.swing.icon; import javax.swing.imageicon; import javax.swing.jcombobox; import javax.swing.jlist; import javax.swing.joptionpane; import javax.swing.uimanager; import javax.swing.unsupportedlookandfeelexception; import org.kaizen.icons.addicon; import org.kaizen.icons.deleteicon01; import org.kaizen.icons.deleteicon02; public class test { public static void main(string[] args) { new test(); } public test() { eventqueue.invokelater(new runnable() { @override public void run() { try { uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname()); } catch (classnotfoundexception | instantiationexception | illegalaccessexception | unsupportedlookandfeelexception ex) { ex.printstacktrace(); } defaultcomboboxmodel model = new defaultcomboboxmodel<car>(); model.addelement(new car(new addicon(16, 16), "honda")); model.addelement(new car(new deleteicon01(16, 16), "mitsubishi")); model.addelement(new car(new deleteicon02(16, 16), "tyota")); jcombobox cb = new jcombobox(model); cb.setrenderer(new carlistcellrenderer()); int result = joptionpane.showconfirmdialog(null, cb, "select car model list below", joptionpane.ok_cancel_option, joptionpane.question_message); if (result == joptionpane.ok_option) { car car = (car) cb.getselecteditem(); } } }); } public static class carlistcellrenderer extends defaultlistcellrenderer { @override public component getlistcellrenderercomponent(jlist<?> list, object value, int index, boolean isselected, boolean cellhasfocus) { system.out.println(value); super.getlistcellrenderercomponent(list, value, index, isselected, cellhasfocus); if (value instanceof car) { car car = (car) value; seticon(car.geticon()); settext(car.gettext()); } else { seticon(null); } return this; } } public static class car { private icon icon; private string text; public car(icon icon, string text) { this.icon = icon; this.text = text; } public icon geticon() { return icon; } public string gettext() { return text; } } }
essentially, need take control on combobox , provide own custom listcellredender
can provide output desire...
Comments
Post a Comment