java swing, выделение элемента во всплывающем окне jcombobox - PullRequest
1 голос
/ 19 ноября 2010

Я хочу выделить элемент внутри всплывающего списка.

Я говорю «выделение цветом», потому что я не хочу выбирать его (например, вызывая setSelectedItem), но выбираю его только во всплывающем окне jcombobox.

Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 19 ноября 2010

Работает следующий вид, в котором выбран элемент, отличный от первого. Однако, если вы используете клавиатуру для изменения выделения, она всегда начинается с первого, потому что это тот, который выбран.

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 );
    }

}

0 голосов
/ 19 ноября 2010

Эта статья содержит рекомендации о том, как вы можете изменить JComboBox:

Хотя он написан для функций автозаполнения, пользовательский механизм выделения без выбора будет очень похож (и, вероятно, проще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...