package gui.views.components; import java.awt.Component; import javax.swing.DefaultCellEditor; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableCellRenderer; import gui.actions.OptionsDialogActions; import gui.utils.Images; import hextostring.replacement.ReplacementType; import hextostring.replacement.Replacements; /** * A table to store and modify replacements. * * @author Maxime PIA */ @SuppressWarnings("serial") public class ReplacementsTable extends JTable { private static final String[] COLUMN_NAMES = {"Sequence", "Replacement", "Escape", "Regex", "Type", "", ""}; public ReplacementsTable(Replacements replacements, OptionsDialogActions acts) { acts.setReplacementTableModelActions(this, COLUMN_NAMES, replacements); final JCheckBox checkbox = new JCheckBox("", false); checkbox.setHorizontalAlignment(SwingConstants.CENTER); DefaultTableCellRenderer booleanRenderer = new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { checkbox.setSelected((Boolean) value); return checkbox; } }; final JButton up = new JButton(Images.resize(Images.TRIANGLE, 10, 10)); final JButton down = new JButton(Images.resize(Images.INVERTED_TRIANGLE, 10, 10)); DefaultTableCellRenderer triangleRenderer = new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return column == COLUMN_NAMES.length - 1 ? down : up; } }; getColumnModel().getColumn(2).setCellRenderer(booleanRenderer); getColumnModel().getColumn(3).setCellRenderer(booleanRenderer); getColumnModel().getColumn(4).setCellEditor(new DefaultCellEditor( new JComboBox<ReplacementType>(ReplacementType.values()) )); getColumnModel().getColumn(5).setCellRenderer(triangleRenderer); acts.addReplacementTableUpCellAction(this, 5); getColumnModel().getColumn(6).setCellRenderer(triangleRenderer); acts.addReplacementTableDownCellAction(this, 6); getColumnModel().getColumn(2).setPreferredWidth(40); getColumnModel().getColumn(3).setPreferredWidth(40); getColumnModel().getColumn(5).setPreferredWidth(20); getColumnModel().getColumn(6).setPreferredWidth(20); putClientProperty("terminateEditOnFocusLost", true); } }