不是陳序员
2013-09-17 14:23
浏览 515
已采纳

java Swing JComboBox下拉框显示图片问题

[code="java"]public class mousergister extends JPanel {
JPanel jp;
JComboBox setImg;
ComboBoxRenderer renderer;

public static void main(String[] args) {
    new mousergister();
}

public mousergister() {
    BaseFrame bf=new BaseFrame("用户注册");
    bf.add(this);               
    this.setLayout(null);


    renderer = new ComboBoxRenderer();
    renderer.setPreferredSize(new Dimension(100, 50));

    Object elements[][] = {
            { new MyIcon("images/1.jpg",this)},
            { new MyIcon("images/2.gif",this) },
            { new MyIcon("images/3.jpg",this)},
            };

    setImg = new JComboBox(elements);
    setImg.setRenderer(renderer);           
    setImg.setBounds(120, 25, 75, 60);
    add(setImg);

    bf.setLocation(500, 100);// 设置窗口在屏幕的位置
    bf.setSize(320, 420);
    bf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    bf.setResizable(false);// 设置游戏窗口大小不可改变
    bf.setVisible(true);

}

private class ComboBoxRenderer extends JLabel implements ListCellRenderer {

    // 这样要是实现接口的方法:

    /*
     * 
     * This method finds the image and text corresponding to the selected
     * 
     * value and returns the label, set up to display the text and image.
     */

    @Override
    public Component getListCellRendererComponent(JList list, Object value,
            int index, boolean isSelected, boolean cellHasFocus) {

        ImageIcon image=null;

         if (value instanceof Object[]) {
             Object[] values = (Object[]) value;                 
              image = (ImageIcon)values[0];
            }
            if (image != null) {

              this.setIcon(image);
            }
            return this;
          }          
}

private class MyIcon extends ImageIcon{
    private Image m;
    private String str;
    private mousergister jp;

    public MyIcon(String str,mousergister jp) {
        Toolkit tool;
        tool = jp.renderer.getToolkit();
        m = tool.getImage(str);
      }
     public void paintIcon(Component lab, Graphics g){
        lab=jp.renderer;
        g.drawImage(m, 20, 20, lab);

    }   

}
}[/code]

图片不会显示。。。怎么改?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • iteye_20264 2013-09-17 22:50
    已采纳

    [quote]
    Object elements[][] = {

    { new MyIcon("images/1.jpg",this)},

    { new MyIcon("images/2.gif",this) },

    { new MyIcon("images/3.jpg",this)},

    };

    [/quote]
    这段直接用ImageIcon
    [code="java"]
    Object elements[][] = {

    { new ImageIcon(this.getClass().getResource("images/1.jpg"))},

    { new ImageIcon(this.getClass().getResource("images/2.gif")) },

    { new ImageIcon(this.getClass().getResource("images/3.jpg"))},

    };

    [/code]

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • M44346460 2013-09-17 22:25

    请google,这种类似于自定义显示的,一搜一大把!

    评论
    解决 无用
    打赏 举报
  • 孟君 2013-09-17 23:28

    getListCellRendererComponent()方法是需要修改的。

    参数value是Object类型,if的判断条件value instanceof Object[]不会成立,if代码块是不会执行的。

    [code="java"]if (value instanceof Object[]) {

    Object[] values = (Object[]) value;

    image = (ImageIcon)values[0];

    }

    if (image != null) {

                  this.setIcon(image);   
                }   
                return this;   
              }    [/code]         
    

    改成下面的试试。
    [code="java"]public Component getListCellRendererComponent(JList list, Object value,
    int index, boolean isSelected, boolean cellHasFocus) {

            if (value != null) {
                setIcon(new ImageIcon("images/1.jpg"));
            }
    
            if (isSelected) {
                setBackground(list.getSelectionBackground());
                setForeground(list.getSelectionForeground());
            } else {
                setBackground(list.getBackground());
                setForeground(list.getForeground());
            }
            return this;
        }[/code]
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题