Java – 如何显示一个输入对话框,其中包含每个项目带有图标的下
发布时间:2020-12-15 04:26:13 所属栏目:Java 来源:网络整理
导读:我在我的swing应用程序中使用此 Java代码来显示一个带有下拉选择列表的输入对话框,以便用户可以从该列表中选择一个项目: String[] carModelsArray = { "Honda","Mitsubishi","Toyota" };String selectedValue = (String)JOptionPane.showInputDialog( null,
我在我的swing应用程序中使用此
Java代码来显示一个带有下拉选择列表的输入对话框,以便用户可以从该列表中选择一个项目:
String[] carModelsArray = { "Honda","Mitsubishi","Toyota" }; String selectedValue = (String)JOptionPane.showInputDialog( null,"Select a car model from the list below:","Car model...",JOptionPane.QUESTION_MESSAGE,null,carModelsArray,carModelsArray[ 0 ] ); 这段代码工作正常,但我想知道我是否还可以为选择列表中的每个项添加一个图标,因此下拉选择列表将如下所示: 我试图将此列表中的项目设置为JLabel项目,但是当在下拉列表中呈现时,JLabel对象都被转换为String值,就像它为列表中的每个项目调用JLabel.toString()方法一样得到它的价值. 有没有办法实现这一目标? 解决方法
简短的回答,而不是你的方式.答案很长,更像……
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,"Mitsubishi")); model.addElement(new Car(new DeleteIcon02(16,"Tyota")); JComboBox cb = new JComboBox(model); cb.setRenderer(new CarListCellRenderer()); int result = JOptionPane.showConfirmDialog(null,cb,"Select a car model from the 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; } } } 基本上,你需要控制组合框并提供你自己的自定义ListCellRedender,它可以提供你想要的输出…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |