在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例桌面应用界面/GUI → java swing 自定义ComboBox的Icon图标

java swing 自定义ComboBox的Icon图标

桌面应用界面/GUI

下载此实例
  • 开发语言:Java
  • 实例大小:0.04M
  • 下载次数:10
  • 浏览次数:270
  • 发布时间:2019-08-24
  • 实例类别:桌面应用界面/GUI
  • 发 布 人:robot666
  • 文件格式:.zip
  • 所需积分:2
 相关标签: ComboBox swing java icon ico

实例介绍

【实例简介】AnimatedIconInComboBox.zip

【实例截图】

from clipboard

【核心代码】

// -*- mode:java; encoding:utf-8 -*-
// vim:set fileencoding=utf-8:
// @homepage@

package example;

import java.awt.*;
import java.awt.image.ImageObserver;
import java.net.URL;
import javax.accessibility.Accessible;
import javax.swing.*;
import javax.swing.plaf.basic.ComboPopup;

public final class MainPanel extends JPanel {
  private MainPanel() {
    super(new BorderLayout());
    URL url1 = getClass().getResource("favicon.png");
    URL url2 = getClass().getResource("animated.gif");

    JComboBox<Icon> combo = new JComboBox<>();
    combo.setModel(new DefaultComboBoxModel<>(new Icon[] {new ImageIcon(url1), makeImageIcon(url2, combo, 1)}));

    JPanel p = new JPanel(new GridLayout(4, 1, 5, 5));
    setBorder(BorderFactory.createEmptyBorder(5, 20, 5, 20));
    p.add(new JLabel("Default ImageIcon"));
    p.add(new JComboBox<>(new Icon[] {new ImageIcon(url1), new ImageIcon(url2)}));
    p.add(new JLabel("ImageIcon#setImageObserver(ImageObserver)"));
    p.add(combo);
    add(p, BorderLayout.NORTH);
    setPreferredSize(new Dimension(320, 240));
  }

  private static Icon makeImageIcon(URL url, JComboBox<?> combo, int row) {
    ImageIcon icon = new ImageIcon(url);
    // Wastefulness: icon.setImageObserver(combo);
    icon.setImageObserver(new ImageObserver() {
      // @see http://www2.gol.com/users/tame/swing/examples/SwingExamples.html
      @Override public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h) {
        if (combo.isShowing() && (infoflags & (FRAMEBITS | ALLBITS)) != 0) {
          repaintComboBox(combo, row);
        }
        return (infoflags & (ALLBITS | ABORT)) == 0;
      }
    });
    return icon;
  }

  protected static void repaintComboBox(JComboBox<?> combo, int row) {
    if (combo.getSelectedIndex() == row) {
      combo.repaint();
    }
    Accessible a = combo.getAccessibleContext().getAccessibleChild(0);
    if (a instanceof ComboPopup) {
      JList<?> list = ((ComboPopup) a).getList();
      if (list.isShowing()) {
        list.repaint(list.getCellBounds(row, row));
      }
    }
  }

  public static void main(String... args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGui();
      }
    });
  }

  public static void createAndShowGui() {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
      ex.printStackTrace();
      Toolkit.getDefaultToolkit().beep();
    }
    JFrame frame = new JFrame("@title@");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.getContentPane().add(new MainPanel());
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}


标签: ComboBox swing java icon ico

实例下载地址

java swing 自定义ComboBox的Icon图标

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警