void (VariableData[] variableData, Project project, PsiElement... scopeElements) { super.init(variableData); myParameterTypeSelectors = new TypeSelector[getVariableData().length]; for (int i = 0; i < myParameterTypeSelectors.length; i++) { final VariableData data = variableData[i]; final TypeSelector selector = createSelector(project, data, scopeElements); myParameterTypeSelectors[i] = selector; getVariableData()[i].type = myParameterTypeSelectors[i].getSelectedType(); //reverse order } myTypeRendererCombo = new ComboBox<>(getVariableData()); myTypeRendererCombo.setOpaque(true); myTypeRendererCombo.setBorder(null); myTypeRendererCombo.setRenderer(SimpleListCellRenderer.create("", value -> value.type.getPresentableText())); final TableColumn typeColumn = myTable.getColumnModel().getColumn(1); typeColumn.setCellEditor(new AbstractTableCellEditor() { TypeSelector myCurrentSelector; final JBComboBoxTableCellEditorComponent myEditorComponent = new JBComboBoxTableCellEditorComponent(); final JLabel myTypeLabel = new JLabel(); @Override @Nullable public Object getCellEditorValue() { if (myCurrentSelector.getComponent() instanceof JLabel) { return myCurrentSelector.getSelectedType(); } return myEditorComponent.getEditorValue(); } @Override public Component getTableCellEditorComponent(final JTable table, final Object value, final boolean isSelected, final int row, final int column) { myCurrentSelector = myParameterTypeSelectors[row]; if (myParameterTypeSelectors[row].getComponent() instanceof JLabel) { PsiType selectedType = myCurrentSelector.getSelectedType(); if (selectedType != null) { myTypeLabel.setText(selectedType.getPresentableText()); } return myTypeLabel; } myEditorComponent.setCell(table, row, column); myEditorComponent.setOptions((Object[])myCurrentSelector.getTypes()); myEditorComponent.setDefaultValue(getVariableData()[row].type); myEditorComponent.setToString(o -> ((PsiType)o).getPresentableText()); return myEditorComponent; } }); myTable.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer() { private final JBComboBoxLabel myLabel = new JBComboBoxLabel(); @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value != null) { myLabel.setText(((PsiType)value).getPresentableText()); myLabel.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground()); myLabel.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground()); if (isSelected) { myLabel.setSelectionIcon(); } else { myLabel.setRegularIcon(); } } return myLabel; } }); }