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

java – 将JLabel插入JComboBox

发布时间:2020-12-15 05:01:24 所属栏目:Java 来源:网络整理
导读:http://prntscr.com/1gpdqe 对不起,这是我第一次参加这个论坛. 谁能帮帮我吗? 我一直试图在JComboBox上一行制作图像和文本节目,在网站上搜索后,我找不到解决问题的方法. JLabel上方的JLabel可以工作,但JComboBox中的JLabel不能. 解决方法 也许这个例子会解
http://prntscr.com/1gpdqe

对不起,这是我第一次参加这个论坛.

谁能帮帮我吗?

我一直试图在JComboBox上一行制作图像和文本节目,在网站上搜索后,我找不到解决问题的方法.

JLabel上方的JLabel可以工作,但JComboBox中的JLabel不能.

解决方法

也许这个例子会解决问题:

在getListCellRendererComponent上我使用了Label Icon

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.HashMap;
import java.util.Map;

import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;


public class ShowConboWithIcons extends JFrame {

private static final long serialVersionUID = 1L;

private static final ImageIcon INFO_ICON  = new ImageIcon("info.png");
private static final ImageIcon NONE_ICON  = new ImageIcon("none.png");
public final String NONE_STR = "None";
private final String INFO_STR = "Info";

private JComboBox comboBox;
private JPanel    topPanel;

private String[] str_arr = null; 


public ShowConboWithIcons(String[] str_arr) {
    this.str_arr = str_arr;     
}


public void createGUI(){

    setMinimumSize(new Dimension(100,100));
    setTitle("Demo");
    setLocation(200,200);

    topPanel = new JPanel();
    getContentPane().add(topPanel,BorderLayout.CENTER);

    Map<Object,Icon> icons = new HashMap<Object,Icon>(); 

    icons.put(NONE_STR,NONE_ICON); 
    icons.put(INFO_STR,INFO_ICON); 

    comboBox = new JComboBox();
    comboBox.setRenderer(new IconListRenderer(icons));
    comboBox.addItem("None");

    for(String val : str_arr){
        comboBox.addItem(val);
    }

    topPanel.add(comboBox);

    super.addWindowListener(new WindowAdapter() {           
        public void windowClosing(WindowEvent e) {              
            dispose();          
        }           
    }); 
}

public static void main(String[] args) throws ClassNotFoundException,InstantiationException,IllegalAccessException,UnsupportedLookAndFeelException {

    UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" );   

    String[] str_arr = {"A","B","C","D","E"};

    ShowConboWithIcons T = new ShowConboWithIcons(str_arr);
    T.createGUI();
    T.setVisible(true);        
}


class IconListRenderer extends DefaultListCellRenderer{ 
    private static final long serialVersionUID = 1L;
    private Map<Object,Icon> icons = null; 

    public IconListRenderer(Map<Object,Icon> icons){ 
        this.icons = icons; 
    } 

    @Override
    public Component getListCellRendererComponent(JList list,Object value,int index,boolean isSelected,boolean cellHasFocus)
    { 
        JLabel label = (JLabel) super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus); 

        // Get icon to use for the list item value 
        Icon icon = icons.get(value); 

        if(!value.toString().equals(NONE_STR)){
            icon = icons.get(INFO_STR);
        }

        // Set icon to display for value 
        label.setIcon(icon); 
        return label; 
    } 
}
}

(编辑:李大同)

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

    推荐文章
      热点阅读