void (@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)); } }