Java Swing How to - Make a combobox, inside a JTree, show its menu as Cell Renderer








Question

We would like to know how to make a combobox, inside a JTree, show its menu as Cell Renderer.

Answer

import java.awt.BorderLayout;
import java.awt.Component;
import java.util.Properties;
/* www.j  av  a 2  s  .  com*/
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.tree.TreeCellEditor;

public class Main {

  public static void main(String args[]) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Properties props = System.getProperties();
    JTree tree = new JTree(props);

    JComboBox comboBox = new JComboBox(new String[] { "A", "B", "C" });
    TreeCellEditor editor = new DefaultCellEditor(comboBox);

    tree.setEditable(true);
    tree.setCellEditor(editor);

    JScrollPane scrollPane = new JScrollPane(tree);
    frame.add(scrollPane, BorderLayout.CENTER);
    frame.setSize(300, 150);
    frame.setVisible(true);
  }

}

class MyDefaultCellEditor extends DefaultCellEditor {

  public MyDefaultCellEditor(JComboBox comboBox) {
    super(comboBox);
  }

  @Override
  public Component getTableCellEditorComponent(JTable table, Object value,
      boolean isSelected, int row, int column) {

    return super.getTableCellEditorComponent(table, value, isSelected, row,
        column);
  }
}