怎么在java.swing的comobobox里使用icon
时间: 2024-02-13 09:07:14 浏览: 221
在 Java Swing 的 JComboBox 中使用 icon 可以通过实现自定义的 ListCellRenderer 接口来实现。
以下是一个简单的例子:
```java
import java.awt.Component;
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.ListCellRenderer;
public class IconComboBox extends JFrame {
private JComboBox<Icon> comboBox;
public IconComboBox() {
Icon[] icons = {new ImageIcon("icon1.png"), new ImageIcon("icon2.png"), new ImageIcon("icon3.png")};
comboBox = new JComboBox<Icon>(icons);
comboBox.setRenderer(new IconListCellRenderer());
add(comboBox);
setSize(200, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
private static class IconListCellRenderer extends JLabel implements ListCellRenderer<Object> {
private DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof Icon) {
setIcon((Icon) value);
setText("");
} else {
setIcon(null);
setText((value == null) ? "" : value.toString());
}
setPreferredSize(new java.awt.Dimension(25, 25));
setOpaque(true);
setBackground(isSelected ? list.getSelectionBackground() : list.getBackground());
setForeground(isSelected ? list.getSelectionForeground() : list.getForeground());
return this;
}
}
public static void main(String[] args) {
new IconComboBox();
}
}
```
在这个例子中,我们创建了一个包含三个 icon 的 JComboBox,然后通过设置 ListCellRenderer 为 IconListCellRenderer 来实现 icon 的显示。其中,IconListCellRenderer 继承了 JLabel,并实现了 ListCellRenderer 接口。在 getListCellRendererComponent 方法中,我们判断 value 是否为 Icon 类型,如果是,则设置 icon 并清空文本,否则使用默认的渲染方式。同时,我们设置了 JLabel 的背景、前景色及大小等属性。
阅读全文
相关推荐













