source: josm/trunk/src/org/openstreetmap/josm/gui/widgets/ButtonColumn.java@ 12172

Last change on this file since 12172 was 11615, checked in by Don-vip, 7 years ago

add javadoc

File size: 3.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.widgets;
3
4import java.awt.Color;
5import java.awt.Component;
6import java.awt.event.ActionEvent;
7import java.awt.event.ActionListener;
8
9import javax.swing.AbstractCellEditor;
10import javax.swing.Action;
11import javax.swing.Icon;
12import javax.swing.JButton;
13import javax.swing.JTable;
14import javax.swing.UIManager;
15import javax.swing.border.LineBorder;
16import javax.swing.table.TableCellEditor;
17import javax.swing.table.TableCellRenderer;
18
19/**
20 * Class based on: http://www.camick.com/java/source/ButtonColumn.java
21 * https://tips4java.wordpress.com/2009/07/12/table-button-column/
22 * @since 10536
23 */
24public class ButtonColumn extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener {
25 private final Action action;
26 private final JButton renderButton;
27 private final JButton editButton;
28 private Object editorValue;
29 private String buttonName;
30
31 /**
32 * Creates a column that is rendered as a button with no action bound to the click event
33 */
34 public ButtonColumn() {
35 this(null);
36 }
37
38 /**
39 * Constructs a new {@code ButtonColumn}.
40 * @param action action
41 * @param buttonName button name
42 */
43 public ButtonColumn(Action action, String buttonName) {
44 this(action);
45 this.buttonName = buttonName;
46 }
47
48 /**
49 * Creates a column that is rendered as a button
50 *
51 * @param action action to be performed when button is pressed
52 */
53 public ButtonColumn(Action action) {
54 this.action = action;
55 renderButton = new JButton();
56 editButton = new JButton();
57 editButton.setFocusPainted(false);
58 editButton.addActionListener(this);
59 editButton.setBorder(new LineBorder(Color.BLUE));
60 }
61
62 @Override
63 public Object getCellEditorValue() {
64 return editorValue;
65 }
66
67 @Override
68 public void actionPerformed(ActionEvent e) {
69 this.action.actionPerformed(e);
70 }
71
72 @Override
73 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
74 this.editorValue = value;
75 if (buttonName != null) {
76 editButton.setText(buttonName);
77 editButton.setIcon(null);
78 } else if (value == null) {
79 editButton.setText("");
80 editButton.setIcon(null);
81 } else if (value instanceof Icon) {
82 editButton.setText("");
83 editButton.setIcon((Icon) value);
84 } else {
85 editButton.setText(value.toString());
86 editButton.setIcon(null);
87 }
88 this.editorValue = value;
89 return editButton;
90 }
91
92 @Override
93 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
94 boolean hasFocus, int row, int column) {
95 if (isSelected) {
96 renderButton.setForeground(table.getSelectionForeground());
97 renderButton.setBackground(table.getSelectionBackground());
98 } else {
99 renderButton.setForeground(table.getForeground());
100 renderButton.setBackground(UIManager.getColor("Button.background"));
101 }
102
103 renderButton.setFocusPainted(hasFocus);
104
105 if (buttonName != null) {
106 renderButton.setText(buttonName);
107 renderButton.setIcon(null);
108 } else if (value == null) {
109 renderButton.setText("");
110 renderButton.setIcon(null);
111 } else if (value instanceof Icon) {
112 renderButton.setText("");
113 renderButton.setIcon((Icon) value);
114 } else {
115 renderButton.setText(value.toString());
116 renderButton.setIcon(null);
117 }
118 return renderButton;
119 }
120}
Note: See TracBrowser for help on using the repository browser.