Index: /trunk/src/org/openstreetmap/josm/gui/preferences/imagery/CacheContentsPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/imagery/CacheContentsPanel.java	(revision 10535)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/imagery/CacheContentsPanel.java	(revision 10536)
@@ -4,9 +4,6 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.Color;
-import java.awt.Component;
 import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -21,17 +18,9 @@
 
 import javax.swing.AbstractAction;
-import javax.swing.AbstractCellEditor;
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.JButton;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTable;
-import javax.swing.UIManager;
-import javax.swing.border.LineBorder;
 import javax.swing.table.DefaultTableModel;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumn;
 import javax.swing.table.TableModel;
@@ -47,4 +36,5 @@
 import org.openstreetmap.josm.gui.layer.WMTSLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.widgets.ButtonColumn;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Pair;
@@ -59,83 +49,4 @@
 public class CacheContentsPanel extends JPanel {
 
-    /**
-     *
-     * Class based on:  http://www.camick.com/java/source/ButtonColumn.java
-     * https://tips4java.wordpress.com/2009/07/12/table-button-column/
-     *
-     */
-    private static final class ButtonColumn extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener {
-        private final Action action;
-        private final JButton renderButton;
-        private final JButton editButton;
-        private Object editorValue;
-
-        private ButtonColumn() {
-            this(null);
-        }
-
-        private ButtonColumn(Action action) {
-            this.action = action;
-            renderButton = new JButton();
-            editButton = new JButton();
-            editButton.setFocusPainted(false);
-            editButton.addActionListener(this);
-            editButton.setBorder(new LineBorder(Color.BLUE));
-        }
-
-        @Override
-        public Object getCellEditorValue() {
-            return editorValue;
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            this.action.actionPerformed(e);
-        }
-
-        @Override
-        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
-            this.editorValue = value;
-            if (value == null) {
-                editButton.setText("");
-                editButton.setIcon(null);
-            } else if (value instanceof Icon) {
-                editButton.setText("");
-                editButton.setIcon((Icon) value);
-            } else {
-                editButton.setText(value.toString());
-                editButton.setIcon(null);
-            }
-            this.editorValue = value;
-            return editButton;
-        }
-
-        @Override
-        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
-                boolean hasFocus, int row, int column) {
-            if (isSelected) {
-                renderButton.setForeground(table.getSelectionForeground());
-                renderButton.setBackground(table.getSelectionBackground());
-            } else {
-                renderButton.setForeground(table.getForeground());
-                renderButton.setBackground(UIManager.getColor("Button.background"));
-            }
-
-            renderButton.setFocusPainted(hasFocus);
-
-            if (value == null) {
-                renderButton.setText("");
-                renderButton.setIcon(null);
-            } else if (value instanceof Icon) {
-                renderButton.setText("");
-                renderButton.setIcon((Icon) value);
-            } else {
-                renderButton.setText(value.toString());
-                renderButton.setIcon(null);
-            }
-            return renderButton;
-        }
-
-    }
 
     private final transient ExecutorService executor =
@@ -192,5 +103,5 @@
     }
 
-    private static String[][] getCacheStats(CacheAccess<String, BufferedImageCacheEntry> cache) {
+    public static String[][] getCacheStats(CacheAccess<String, BufferedImageCacheEntry> cache) {
         Set<String> keySet = cache.getCacheControl().getKeySet();
         Map<String, int[]> temp = new ConcurrentHashMap<>(); // use int[] as a Object reference to int, gives better performance
Index: /trunk/src/org/openstreetmap/josm/gui/widgets/ButtonColumn.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/widgets/ButtonColumn.java	(revision 10536)
+++ /trunk/src/org/openstreetmap/josm/gui/widgets/ButtonColumn.java	(revision 10536)
@@ -0,0 +1,106 @@
+// License: GPL. For details, see LICENSE file.
+
+package org.openstreetmap.josm.gui.widgets;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JTable;
+import javax.swing.UIManager;
+import javax.swing.border.LineBorder;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+
+/**
+ *
+ * Class based on:  http://www.camick.com/java/source/ButtonColumn.java
+ * https://tips4java.wordpress.com/2009/07/12/table-button-column/
+ *
+ */
+public class ButtonColumn extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener {
+    private final Action action;
+    private final JButton renderButton;
+    private final JButton editButton;
+    private Object editorValue;
+
+    /**
+     * Creates a column that is rendered as a button with no action bound to the click event
+     */
+    public ButtonColumn() {
+        this(null);
+    }
+
+    /**
+     * Creates a column that is rendered as a button
+     *
+     * @param action action to be performed when button is pressed
+     */
+    public ButtonColumn(Action action) {
+        this.action = action;
+        renderButton = new JButton();
+        editButton = new JButton();
+        editButton.setFocusPainted(false);
+        editButton.addActionListener(this);
+        editButton.setBorder(new LineBorder(Color.BLUE));
+    }
+
+    @Override
+    public Object getCellEditorValue() {
+        return editorValue;
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        this.action.actionPerformed(e);
+    }
+
+    @Override
+    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+        this.editorValue = value;
+        if (value == null) {
+            editButton.setText("");
+            editButton.setIcon(null);
+        } else if (value instanceof Icon) {
+            editButton.setText("");
+            editButton.setIcon((Icon) value);
+        } else {
+            editButton.setText(value.toString());
+            editButton.setIcon(null);
+        }
+        this.editorValue = value;
+        return editButton;
+    }
+
+    @Override
+    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
+            boolean hasFocus, int row, int column) {
+        if (isSelected) {
+            renderButton.setForeground(table.getSelectionForeground());
+            renderButton.setBackground(table.getSelectionBackground());
+        } else {
+            renderButton.setForeground(table.getForeground());
+            renderButton.setBackground(UIManager.getColor("Button.background"));
+        }
+
+        renderButton.setFocusPainted(hasFocus);
+
+        if (value == null) {
+            renderButton.setText("");
+            renderButton.setIcon(null);
+        } else if (value instanceof Icon) {
+            renderButton.setText("");
+            renderButton.setIcon((Icon) value);
+        } else {
+            renderButton.setText(value.toString());
+            renderButton.setIcon(null);
+        }
+        return renderButton;
+    }
+
+}
