加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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,它可以提供你想要的输出……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读