gpt4 book ai didi

java - 自定义 JComboBox 顶部标签

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:03:34 26 4
gpt4 key购买 nike

希望是一个简单的问题。

来自 http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/components/combobox.html 上的示例在“提供自定义渲染器”部分,我可以制作一个 JComboBox,如

Picture 3 - Text 3
-------------------
Picture 1 - Text 1
Picture 2 - Text 2
Picture 3 - Text 3
Picture 4 - Text 4
Picture 5 - Text 5

其中Picture 3 - Text 3为当前选中项。

是否可以自定义标签?比如

Text 3
-------------------
Picture 1 - Text 1
Picture 2 - Text 2
Picture 3 - Text 3
Picture 4 - Text 4
Picture 5 - Text 5

组合框处于最小化状态时不显示图像。

我以前使用过 JButton/未修饰的弹出 JFrame 来模拟这个,但我想知道是否可以使用纯 JComboBox

谢谢

最佳答案

Is it possible to have a custom label? Such as...

是的。同一个渲染器用于渲染下拉列表和组合框中的选定项。当“渲染器索引”为-1 时,选择的值为渲染器,因此您可以根据需要自定义渲染。像这样的东西:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;

public class ComboBoxItemIcon extends JFrame
{
public ComboBoxItemIcon()
{
Vector model = new Vector();
model.addElement( new Item(new ImageIcon("copy16.gif"), "copy" ) );
model.addElement( new Item(new ImageIcon("add16.gif"), "add" ) );
model.addElement( new Item(new ImageIcon("about16.gif"), "about" ) );

JComboBox comboBox;

comboBox = new JComboBox( model );
comboBox.setRenderer( new ItemRenderer() );
getContentPane().add(comboBox, BorderLayout.SOUTH );
}

class ItemRenderer extends BasicComboBoxRenderer
{
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus)
{
super.getListCellRendererComponent(list, value, index,
isSelected, cellHasFocus);

Item item = (Item)value;

if (index == -1)
{
setText( item.getText() );
setIcon( null );
}
else
{
setText( item.getText() );
setIcon( item.getIcon() );
}

return this;
}
}

class Item
{
private Icon icon;
private String text;

public Item(Icon icon, String text)
{
this.icon = icon;
this.text = text;
}

public Icon getIcon()
{
return icon;
}

public String getText()
{
return text;
}
}

public static void main(String[] args)
{
JFrame frame = new ComboBoxItemIcon();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible( true );
}

}

关于java - 自定义 JComboBox 顶部标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3339176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com