diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java index fc01a8a0424b..5eaf9a1b3be8 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java @@ -57,10 +57,7 @@ import org.jetbrains.annotations.Nullable; import sun.swing.table.DefaultTableCellHeaderRenderer; import javax.swing.*; -import javax.swing.event.CellEditorListener; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.event.TableModelEvent; +import javax.swing.event.*; import javax.swing.table.*; import java.awt.*; import java.awt.datatransfer.StringSelection; @@ -86,6 +83,14 @@ public class VcsLogGraphTable extends JBTable implements TypeSafeDataProvider, C private final GraphCommitCellRender myGraphCommitCellRender; private final MyDummyTableCellEditor myDummyEditor = new MyDummyTableCellEditor(); @NotNull private final TableCellRenderer myDummyRenderer = new DefaultTableCellRenderer(); + private final TableModelListener myColumnSizeInitializer = new TableModelListener() { + @Override + public void tableChanged(TableModelEvent e) { + if (initColumnSize()) { + getModel().removeTableModelListener(this); + } + } + }; private boolean myColumnsSizeInitialized = false; @@ -132,14 +137,24 @@ public class VcsLogGraphTable extends JBTable implements TypeSafeDataProvider, C @Override public void setModel(@NotNull TableModel model) { super.setModel(model); - // initialize sizes once, when the real non-empty model is set - if (!myColumnsSizeInitialized && model.getRowCount() > 0) { + if (getModel().getRowCount() > 0) { + initColumnSize(); + } + else { + model.addTableModelListener(myColumnSizeInitializer); + } + } + + private boolean initColumnSize() { + if (!myColumnsSizeInitialized && getModel().getRowCount() > 0) { myColumnsSizeInitialized = true; setColumnPreferredSize(); setAutoCreateColumnsFromModel(false); // otherwise sizes are recalculated after each TableColumn re-initialization getColumnModel().getColumn(GraphTableModel.ROOT_COLUMN).setHeaderRenderer(new RootHeaderRenderer()); + return true; } + return false; } private void setColumnPreferredSize() {