ポップアップリスト内のアイテムを強調表示したい。
選択したくないので(たとえば、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を変更する方法についてのガイダンスを提供します。
オートコンプリート機能用に作成されていますが、選択せずに強調表示するカスタムメカニズムは非常に似ています(おそらく簡単です)。