JComponent () { ThreadingAssertions.assertEventDispatchThread(); //todo multi-editing, separate project/ide combos _if_ needed by specific configurable (SQL, no Web) myPanel = new JPanel(new BorderLayout()); myModel = new MyModel<>(param(TARGET_TITLE), param(MAPPING_TITLE)); myTable = new JBTable(myModel) { @SuppressWarnings("unchecked") @Override public String getToolTipText(@NotNull MouseEvent event) { Point point = event.getPoint(); int row = rowAtPoint(point); int col = columnAtPoint(point); if (row != -1 && col == 1) { return getToolTipFor((T)getValueAt(convertRowIndexToModel(row), col)); } return super.getToolTipText(event); } }; setupPerFileTable(); JPanel tablePanel = ToolbarDecorator.createDecorator(myTable) .disableUpAction() .disableDownAction() .setAddAction(button -> doAddAction()) .setRemoveAction(button -> doRemoveAction()) .setEditAction(button -> doEditAction()) .setEditActionUpdater(e -> myTable.getSelectedRows().length > 0) .createPanel(); myTable.getEmptyText().setText(param(EMPTY_TEXT).replace( "$addShortcut", KeymapUtil.getFirstKeyboardShortcutText(CommonActionsPanel.getCommonShortcut(CommonActionsPanel.Buttons.ADD)))); JBLabel label = new JBLabel(param(DESCRIPTION)); label.setBorder(BorderFactory.createEmptyBorder(TITLED_BORDER_TOP_INSET, TITLED_BORDER_INDENT, TITLED_BORDER_BOTTOM_INSET, 0)); label.setComponentStyle(UIUtil.ComponentStyle.SMALL); JComponent north = createDefaultMappingComponent(); if (north != null) { myPanel.add(north, BorderLayout.NORTH); } myPanel.add(label, BorderLayout.SOUTH); myPanel.add(tablePanel, BorderLayout.CENTER); return myPanel; }