Как загрузить дерево внутри JComboBox? - PullRequest
2 голосов
/ 15 марта 2011

Как я могу показать дерево во всплывающем окне JComboBox?

Вот пример дерева:

Theoretical computer science 
           Mathematical logic 
            Automata theory 
Algorithms and data structures
           Analysis of algorithms
           Algorithms

Ответы [ 4 ]

2 голосов
/ 15 марта 2011

По умолчанию нет способа поместить дерево в поле со списком.Существует несколько вариантов:

Если вы можете разрешить расширение узлов, вы можете добиться аналогичного эффекта, добавив пробел перед некоторыми параметрами в стандартном JComobBox.Или даже пробел и тире перед опциями листа.

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

0 голосов
/ 06 августа 2015

Я использую TreeComboBox игры разума ( ссылка ).Для этого требуется класс AbstractComboBoxUI того же проекта.

0 голосов
/ 08 апреля 2011

Вы можете написать свой собственный рендерер и поместить изображение триода перед возвращаемой меткой для подузлов.

Что-то вроде:

private static class NodeComboBoxRenderer implements ListCellRenderer {

    protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        if(value.isSubNode()) { //something to find out
            renderer.setIcon("here comes the resource");
        }
        return renderer;
    }
}
0 голосов
/ 15 марта 2011

Когда качели были активны, раньше было JXComboBox, что позволяет вам иметь в выпадающем меню другие компоненты, такие как JTable / JTree.Отметьте здесь или здесь , вы можете найти его источник или документацию.

...