[英]custom JComboBox top label
希望是一个简单的问题。
从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
谢谢
是否可以拥有自定义标签? 如...
是。 相同的渲染器用于渲染下拉列表和组合框中的选定项。 当“渲染器索引”为-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 );
}
}
渲染中似乎有3个与显示图像和文本相关的函数调用:
setIcon setText setFont
我没有编译这个例子,但我会尝试注释掉setIcon(icon); 从函数getListCellRendererComponent,因为它似乎显示所选项目的图像。
如果评论它会破坏代码,那么我会尝试覆盖一个空白图像或某些东西作为解决方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.