Вы можете создать ComboBoxEditor, чей компонент (возвращаемый getEditorComponent) является JTree
Хотя вы, возможно, уже пробовали это.
Я не знаю, как бы это выглядело. Опубликовать скриншот, если вы делаете это работает. :)
EDIT
Я быстро попробую. Это ужасно, но это только начало.
альтернативный текст http://img120.imageshack.us/img120/2563/yiakxk2.png
Вот код, за что стоит. :(
Вероятно, вы должны начать думать в альтернативах. А как насчет фальшивого комбо, представляющего собой JButton без рамки, когда нажата скрытая панель, появится отображаемое дерево.
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class ComboTree {
public static void main( String [] args ) {
JComboBox c = new JComboBox( new String [] { "Hello", "there"});
c.setModel( new CustomComboModel() );
c.setEditor( new TreeComboEditor() );
c.setRenderer( new TreeComboEditor() );
JFrame frame = new JFrame();
frame.add( c , BorderLayout.NORTH ) ;
frame.pack();
frame.setVisible( true );
}
}
class CustomComboModel implements ComboBoxModel {
public Object getSelectedItem() { return ":P"; }
public void setSelectedItem(Object anItem) {}
public void addListDataListener(ListDataListener l) {}
public Object getElementAt(int index) { return "at " + index ; }
public int getSize() { return 2; }
public void removeListDataListener(ListDataListener l) {}
}
class TreeComboEditor implements ComboBoxEditor, ListCellRenderer {
// Editor interface
public void addActionListener(ActionListener l) {}
public Component getEditorComponent() {
return new JTree() ;
}
public Object getItem() { return "";}
public void removeActionListener(ActionListener l) {}
public void selectAll() {}
public void setItem(Object anObject) {}
// Render interface
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
return new JTree();
}
}