我想突出显示弹出列表中的一个项目。
我说“突出显示”是因为我不想选择它(例如通过调用 setSelectedItem),而只是让它在 jcombobox 弹出窗口中被选中。
我能怎么做?
以下种类的作品是选择了第一个以外的项目。但是,如果您使用键盘更改选择,它总是从第一个开始,因为那是被选中的那个。
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.plaf.basic.*;
public class ComboBoxSelect extends JFrame
{
public ComboBoxSelect()
{
String[] items = { "Item1", "Item2", "Item3", "Item4", "Item5" };
JComboBox comboBox = new JComboBox( items );
add( comboBox );
comboBox.addPopupMenuListener(new PopupMenuListener()
{
public void popupMenuWillBecomeVisible(PopupMenuEvent e)
{
JComboBox comboBox = (JComboBox)e.getSource();
BasicComboPopup popup = (BasicComboPopup)comboBox.getAccessibleContext().getAccessibleChild(0);
JList list = popup.getList();
list.setSelectedIndex(2);
}
public void popupMenuCanceled(PopupMenuEvent e) {}
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
});
}
public static void main(String[] args)
{
ComboBoxSelect frame = new ComboBoxSelect();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
}
这篇文章提供了有关如何修改 JComboBox 的指导:
尽管它是为自动完成功能而编写的,但在不选择的情况下突出显示的自定义机制将非常相似(并且可能更容易)。