如何在JComboBox的箭头图标附近添加图标

Min*_*inh 1 java swing

我想创建JComboBox类似于Firefox的URL文本框的控件.有谁知道如何自定义文本域JComboBox.我想在ALIGN.HORIZONTAL_RIGHT附近的箭头按钮上添加一些图标JComboBox


感谢您的详细解释.实际上我将组合DefaultListCellRenderer并将图标添加到组合框,如下面的代码

import java.awt.Dimension;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Main extends JFrame {
    public Main() {
        // Create icon "C"
        JButton jb = new JButton("C");
        jb.setMargin(new Insets(0, 0, 0, 0));
        jb.setBounds(245, 2, 18, 18);

        // Create combo box
        String[] languages = new String[]{"Java", "C#", "PHP"};
        JComboBox jc = new JComboBox(languages);
        // jc.setEditable(true);
        jc.add(jb);

        getContentPane().add(jc);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(new Dimension(300, 58));
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        final Main main = new Main();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                main.setVisible(true);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我放jc.setEditable(true); 组合编辑隐藏了我的图标.我正在考虑另一种模拟Firefox真棒的方法.你对此有什么想法吗?

abe*_*t80 5

要更改组件的呈现方式,通常可以使用所谓的Renderers.

对于组合框,请查看如何创建自定义组合框渲染器.只需快速浏览一下,但对于您的情况,简单的配置DefaultListCellRenderer可能就足够了,因为您可以设置JLabel属性以将文本定位到图像.如果没有,只需从中扩展即可.

还要记住,您必须设置一个包含图标的模型,以便组合框渲染器可以获取它 - 可能也想要自定义ComboBoxModel,具体取决于您的数据对象.