private void init(@Nullable Component component) {
    setSplitterProportionKey("UiInspector.table.splitter.proportion");

    myTable = new StripeTable(myModel);
    TableSpeedSearch.installOn(myTable);

    TableColumnModel columnModel = myTable.getColumnModel();
    TableColumn propertyColumn = columnModel.getColumn(0);
    propertyColumn.setMinWidth(JBUIScale.scale(220));
    propertyColumn.setMaxWidth(JBUIScale.scale(220));
    propertyColumn.setResizable(false);
    propertyColumn.setCellRenderer(new PropertyNameRenderer());

    TableColumn valueColumn = columnModel.getColumn(1);
    valueColumn.setMinWidth(JBUIScale.scale(200));
    valueColumn.setResizable(false);
    valueColumn.setCellRenderer(new ValueCellRenderer());
    valueColumn.setCellEditor(new DefaultCellEditor(new JBTextField()) {
      @Override
      public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        Component comp = table.getCellRenderer(row, column).getTableCellRendererComponent(table, value, false, false, row, column);
        Object realValue = table.getModel().getValueAt(row, column);
        if (comp instanceof JLabel) {
          value = ((JLabel)comp).getText();
        }
        if (realValue instanceof Color) {
          Rectangle cellRect = table.getCellRect(row, column, true);
          ColorChooserService.getInstance().showPopup(null, (Color)realValue, new ColorListener() {
            @Override
            public void colorChanged(Color color, Object source) {
              if (component != null) {
                component.setBackground(color);
                String name = myModel.myProperties.get(row).propertyName;
                myModel.myProperties.set(row, new PropertyBean(name, color));
              }
            }
          }, new RelativePoint(table, new Point(cellRect.x + JBUI.scale(6), cellRect.y + cellRect.height)));
          return null;
        }
        Component result = super.getTableCellEditorComponent(table, value, isSelected, row, column);
        ((JComponent)result).setBorder(BorderFactory.createLineBorder(JBColor.GRAY, 1));
        return result;
      }
    });
    new DoubleClickListener() {
      @Override
      protected boolean onDoubleClick(@NotNull MouseEvent event) {
        int row = myTable.rowAtPoint(event.getPoint());
        int column = 1;
        if (row >= 0 && row < myTable.getRowCount() && column < myTable.getColumnCount()) {
          Component renderer = myTable.getCellRenderer(row, column)
            .getTableCellRendererComponent(myTable, myModel.getValueAt(row, column), false, false, row, column);
          if (renderer instanceof JLabel) {
            StringBuilder sb = new StringBuilder();
            if (component != null) sb.append(UiInspectorUtil.getComponentName(component)).append(" ");
            String value = StringUtil.trimStart(((JLabel)renderer).getText().replace("\r", "").replace("\tat", "\n\tat"), "at ");
            sb.append("'").append(myModel.getValueAt(row, 0)).append("':");
            sb.append(value.contains("\n") || value.length() > 100 ? "\n" : " ");
            sb.append(value);
            //noinspection UseOfSystemOutOrSystemErr
            System.out.println(sb);
            return true;
          }
        }
        return false;
      }
    }.installOn(myTable);

    MyCellSelectionListener selectionListener = new MyCellSelectionListener();
    myTable.getSelectionModel().addListSelectionListener(selectionListener);
    myTable.getColumnModel().getSelectionModel().addListSelectionListener(selectionListener);

    myTable.setCellSelectionEnabled(true);
    myTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);

    setFirstComponent(new JBScrollPane(myTable));
    if (component != null) {
      setSecondComponent(new DimensionsComponent(component));
    }
  }
private void init(@Nullable Component component)