Changeset 8621 in josm for trunk/src/org


Ignore:
Timestamp:
2015-07-27T00:01:30+02:00 (5 years ago)
Author:
wiktorn
Message:

Fix artifacts on clicks in CacheContentsPanel. Closes: #11703

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/imagery/CacheContentsPanel.java

    r8604 r8621  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.awt.Color;
    67import java.awt.Component;
    78import java.awt.GridBagLayout;
     
    2930import javax.swing.JTable;
    3031import javax.swing.UIManager;
     32import javax.swing.border.LineBorder;
    3133import javax.swing.table.DefaultTableModel;
    3234import javax.swing.table.TableCellEditor;
     
    5557public class CacheContentsPanel extends JPanel {
    5658
     59    /**
     60     *
     61     * Class based on:  http://www.camick.com/java/source/ButtonColumn.java
     62     * https://tips4java.wordpress.com/2009/07/12/table-button-column/
     63     *
     64     */
    5765    private static final class ButtonColumn extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener {
    5866        private final Action action;
    5967        private final JButton renderButton;
     68        private JButton editButton;
     69        private Object editorValue;
    6070
    6171        private ButtonColumn(Action action) {
    6272            this.action = action;
    6373            renderButton = new JButton();
    64             renderButton.addActionListener(this);
     74            editButton = new JButton();
     75            editButton.setFocusPainted(false);
     76            editButton.addActionListener(this);
     77            editButton.setBorder(new LineBorder(Color.BLUE));
    6578        }
    6679
    6780        @Override
    6881        public Object getCellEditorValue() {
    69             return renderButton;
     82            return editorValue;
    7083        }
    7184
     
    7790        @Override
    7891        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    79             return getTableCellRendererComponent(table, value, isSelected, false, row, column);
     92            this.editorValue = value;
     93            if (value == null) {
     94                editButton.setText("");
     95                editButton.setIcon(null);
     96            } else if (value instanceof Icon) {
     97                editButton.setText("");
     98                editButton.setIcon((Icon) value);
     99            } else {
     100                editButton.setText(value.toString());
     101                editButton.setIcon(null);
     102            }
     103            this.editorValue = value;
     104            return editButton;
    80105        }
    81106
     
    83108        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
    84109                boolean hasFocus, int row, int column) {
    85 
    86110            if (isSelected) {
    87                     renderButton.setForeground(table.getSelectionForeground());
    88                     renderButton.setBackground(table.getSelectionBackground());
    89             } else {
    90                     renderButton.setForeground(table.getForeground());
    91                     renderButton.setBackground(UIManager.getColor("Button.background"));
     111                renderButton.setForeground(table.getSelectionForeground());
     112                renderButton.setBackground(table.getSelectionBackground());
     113            } else {
     114                renderButton.setForeground(table.getForeground());
     115                renderButton.setBackground(UIManager.getColor("Button.background"));
    92116            }
    93117
     
    95119
    96120            if (value == null) {
    97                     renderButton.setText("");
    98                     renderButton.setIcon(null);
     121                renderButton.setText("");
     122                renderButton.setIcon(null);
    99123            } else if (value instanceof Icon) {
    100                     renderButton.setText("");
    101                     renderButton.setIcon((Icon) value);
    102             } else {
    103                     renderButton.setText(value.toString());
    104                     renderButton.setIcon(null);
     124                renderButton.setText("");
     125                renderButton.setIcon((Icon) value);
     126            } else {
     127                renderButton.setText(value.toString());
     128                renderButton.setIcon(null);
    105129            }
    106130            return renderButton;
     
    109133    }
    110134
    111     private transient ExecutorService executor = Executors.newSingleThreadExecutor();
     135    private final transient ExecutorService executor = Executors.newSingleThreadExecutor();
    112136
    113137    /**
Note: See TracChangeset for help on using the changeset viewer.