Changeset 3052 for DataCleaner
- Timestamp:
- 01/18/12 17:52:40 (4 months ago)
- Location:
- DataCleaner/trunk/core/src/main
- Files:
-
- 2 added
- 9 edited
- 2 moved
-
java/org/eobjects/datacleaner/Main.java (modified) (1 diff)
-
java/org/eobjects/datacleaner/actions/DisplayOptionsForFilterOutcomeActionListener.java (moved) (moved from DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/actions/DisplayOutputWritersForFilterOutcomeActionListener.java) (2 diffs)
-
java/org/eobjects/datacleaner/actions/DisplayOutputWritersAction.java (moved) (moved from DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/actions/AbstractDisplayOutputWritersActionListener.java) (4 diffs)
-
java/org/eobjects/datacleaner/actions/DisplayOutputWritersForTransformedDataActionListener.java (modified) (3 diffs)
-
java/org/eobjects/datacleaner/panels/FilterJobBuilderPanel.java (modified) (6 diffs)
-
java/org/eobjects/datacleaner/panels/TransformerJobBuilderPanel.java (modified) (3 diffs)
-
java/org/eobjects/datacleaner/widgets/DCWindowMenuBar.java (modified) (4 diffs)
-
java/org/eobjects/datacleaner/widgets/DescriptorPopupMenu.java (modified) (1 diff)
-
java/org/eobjects/datacleaner/widgets/HelpIcon.java (modified) (3 diffs)
-
java/org/eobjects/datacleaner/widgets/properties/AbstractPropertyWidget.java (modified) (2 diffs)
-
java/org/eobjects/datacleaner/widgets/properties/MultipleInputColumnsPropertyWidget.java (modified) (5 diffs)
-
resources/images/help (added)
-
resources/images/help/help_requirement_mapping.png (added)
Legend:
- Unmodified
- Added
- Removed
-
DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/Main.java
r2999 r3052 38 38 public final class Main { 39 39 40 public static final String VERSION = "2.4. 1";40 public static final String VERSION = "2.4.2"; 41 41 42 42 public static void main(String[] args) { -
DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/actions/DisplayOptionsForFilterOutcomeActionListener.java
r2632 r3052 20 20 package org.eobjects.datacleaner.actions; 21 21 22 import java.awt.event.ActionEvent; 23 import java.awt.event.ActionListener; 24 import java.util.List; 25 26 import javax.swing.JComponent; 27 import javax.swing.JMenuItem; 28 import javax.swing.JPopupMenu; 29 22 30 import org.eobjects.analyzer.beans.api.Analyzer; 23 import org.eobjects.analyzer.configuration.AnalyzerBeansConfiguration; 31 import org.eobjects.analyzer.beans.writers.WriteDataCategory; 32 import org.eobjects.analyzer.job.FilterOutcome; 33 import org.eobjects.analyzer.job.Outcome; 24 34 import org.eobjects.analyzer.job.builder.AnalysisJobBuilder; 25 35 import org.eobjects.analyzer.job.builder.AnalyzerJobBuilder; 26 36 import org.eobjects.analyzer.job.builder.FilterJobBuilder; 27 37 import org.eobjects.datacleaner.output.beans.AbstractOutputWriterAnalyzer; 38 import org.eobjects.datacleaner.util.IconUtils; 39 import org.eobjects.datacleaner.util.ImageManager; 40 import org.eobjects.datacleaner.widgets.DescriptorMenu; 28 41 29 42 /** … … 32 45 * @author Kasper SÞrensen 33 46 */ 34 public class DisplayOutputWritersForFilterOutcomeActionListener extends AbstractDisplayOutputWritersActionListener { 47 public class DisplayOptionsForFilterOutcomeActionListener extends DisplayOutputWritersAction implements ActionListener { 48 49 private static final ImageManager imageManager = ImageManager.getInstance(); 35 50 36 51 private final FilterJobBuilder<?, ?> _filterJobBuilder; 37 52 private final String _categoryName; 38 53 39 public DisplayOutputWritersForFilterOutcomeActionListener(AnalyzerBeansConfiguration configuration, 40 AnalysisJobBuilder analysisJobBuilder, FilterJobBuilder<?, ?> filterJobBuilder, String categoryName) { 41 super(configuration, analysisJobBuilder); 54 public DisplayOptionsForFilterOutcomeActionListener(FilterJobBuilder<?, ?> filterJobBuilder, String categoryName) { 55 super(filterJobBuilder.getAnalysisJobBuilder()); 42 56 _filterJobBuilder = filterJobBuilder; 43 57 _categoryName = categoryName; 58 } 59 60 @Override 61 public void actionPerformed(ActionEvent e) { 62 final FilterOutcome requirement = _filterJobBuilder.getOutcome(_filterJobBuilder.getDescriptor() 63 .getOutcomeCategoryByName(_categoryName)); 64 65 final DescriptorMenu writeDataMenu = new DescriptorMenu(new WriteDataCategory()); 66 { 67 List<JMenuItem> writerDataMenuItems = createMenuItems(); 68 for (JMenuItem menuItem : writerDataMenuItems) { 69 writeDataMenu.add(menuItem); 70 } 71 } 72 73 final AnalysisJobBuilder analysisJobBuilder = _filterJobBuilder.getAnalysisJobBuilder(); 74 75 // TODO: Add more items: "Dependent components" (click through), 76 // "Add analyzer", "Add transformer" 77 78 final JMenuItem setAsDefaultOutcomeMenuItem = new JMenuItem("Set as default requirement"); 79 setAsDefaultOutcomeMenuItem 80 .setToolTipText("Makes this filter outcome the default choice for other components in the job."); 81 82 Outcome existingDefaultRequirement = analysisJobBuilder.getDefaultRequirement(); 83 if (requirement.equals(existingDefaultRequirement)) { 84 setAsDefaultOutcomeMenuItem 85 .setIcon(imageManager.getImageIcon(IconUtils.STATUS_VALID, IconUtils.ICON_SIZE_SMALL)); 86 } 87 88 setAsDefaultOutcomeMenuItem.addActionListener(new ActionListener() { 89 @Override 90 public void actionPerformed(ActionEvent e) { 91 Enum<?> category = _filterJobBuilder.getDescriptor().getOutcomeCategoryByName(_categoryName); 92 FilterOutcome outcome = _filterJobBuilder.getOutcome(category); 93 analysisJobBuilder.setDefaultRequirement(outcome); 94 } 95 }); 96 97 final JPopupMenu popup = new JPopupMenu(); 98 popup.add(writeDataMenu); 99 popup.add(setAsDefaultOutcomeMenuItem); 100 101 final JComponent component = (JComponent) e.getSource(); 102 popup.show(component, 0, component.getHeight()); 44 103 } 45 104 -
DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/actions/DisplayOutputWritersAction.java
r2963 r3052 35 35 import org.eobjects.analyzer.beans.api.ComponentCategory; 36 36 import org.eobjects.analyzer.beans.writers.WriteDataCategory; 37 import org.eobjects.analyzer.configuration.AnalyzerBeansConfiguration;38 37 import org.eobjects.analyzer.descriptors.AnalyzerBeanDescriptor; 39 38 import org.eobjects.analyzer.job.builder.AnalysisJobBuilder; … … 43 42 import org.eobjects.datacleaner.widgets.DescriptorMenuItem; 44 43 45 public class AbstractDisplayOutputWritersActionListener implements ActionListener{44 public class DisplayOutputWritersAction { 46 45 47 46 private final AnalysisJobBuilder _analysisJobBuilder; 48 private final AnalyzerBeansConfiguration _configuration;49 47 50 public AbstractDisplayOutputWritersActionListener(AnalyzerBeansConfiguration configuration, 51 AnalysisJobBuilder analysisJobBuilder) { 52 _configuration = configuration; 48 public DisplayOutputWritersAction(AnalysisJobBuilder analysisJobBuilder) { 53 49 _analysisJobBuilder = analysisJobBuilder; 54 50 } 55 51 56 @Override 57 public final void actionPerformed(ActionEvent e) { 52 public final void showPopup(JComponent component) { 58 53 JPopupMenu popup = new JPopupMenu(); 59 54 … … 63 58 } 64 59 65 JComponent component = (JComponent) e.getSource();66 60 popup.show(component, 0, component.getHeight()); 67 61 } … … 92 86 93 87 protected List<AnalyzerBeanDescriptor<?>> getDescriptors() { 94 Collection<AnalyzerBeanDescriptor<?>> descriptors = _ configuration.getDescriptorProvider()88 Collection<AnalyzerBeanDescriptor<?>> descriptors = _analysisJobBuilder.getConfiguration().getDescriptorProvider() 95 89 .getAnalyzerBeanDescriptors(); 96 90 List<AnalyzerBeanDescriptor<?>> result = CollectionUtils2.sorted(descriptors, new DisplayNameComparator()); -
DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/actions/DisplayOutputWritersForTransformedDataActionListener.java
r2632 r3052 20 20 package org.eobjects.datacleaner.actions; 21 21 22 import java.awt.event.ActionEvent; 23 import java.awt.event.ActionListener; 22 24 import java.util.List; 25 26 import javax.swing.JComponent; 23 27 24 28 import org.eobjects.analyzer.beans.api.Analyzer; … … 35 39 * @author Kasper SÞrensen 36 40 */ 37 public class DisplayOutputWritersForTransformedDataActionListener extends AbstractDisplayOutputWritersActionListener { 41 public class DisplayOutputWritersForTransformedDataActionListener extends DisplayOutputWritersAction implements 42 ActionListener { 38 43 39 44 private final TransformerJobBuilder<?> _transformerJobBuilder; 40 45 41 46 public DisplayOutputWritersForTransformedDataActionListener(TransformerJobBuilder<?> transformerJobBuilder) { 42 super(transformerJobBuilder.getAnalysisJobBuilder().getConfiguration(), transformerJobBuilder 43 .getAnalysisJobBuilder()); 47 super(transformerJobBuilder.getAnalysisJobBuilder()); 44 48 _transformerJobBuilder = transformerJobBuilder; 45 49 } … … 59 63 } 60 64 65 @Override 66 public void actionPerformed(ActionEvent e) { 67 JComponent component = (JComponent) e.getSource(); 68 showPopup(component); 69 } 70 61 71 } -
DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/panels/FilterJobBuilderPanel.java
r2600 r3052 23 23 import java.awt.event.ActionEvent; 24 24 import java.awt.event.ActionListener; 25 import java.io.File; 25 26 import java.util.Set; 26 27 27 28 import javax.swing.JButton; 28 29 import javax.swing.JComponent; 30 import javax.swing.JFrame; 31 import javax.swing.JLabel; 32 import javax.swing.JOptionPane; 29 33 import javax.swing.border.TitledBorder; 30 34 35 import org.eobjects.analyzer.beans.filter.NotNullFilter; 36 import org.eobjects.analyzer.beans.filter.ValidationCategory; 31 37 import org.eobjects.analyzer.descriptors.ConfiguredPropertyDescriptor; 32 38 import org.eobjects.analyzer.descriptors.FilterBeanDescriptor; … … 34 40 import org.eobjects.analyzer.job.builder.AnalysisJobBuilder; 35 41 import org.eobjects.analyzer.job.builder.FilterJobBuilder; 36 import org.eobjects.datacleaner.actions.DisplayOutputWritersForFilterOutcomeActionListener; 42 import org.eobjects.datacleaner.actions.DisplayOptionsForFilterOutcomeActionListener; 43 import org.eobjects.datacleaner.guice.DCModule; 44 import org.eobjects.datacleaner.guice.InjectorBuilder; 37 45 import org.eobjects.datacleaner.util.IconUtils; 38 46 import org.eobjects.datacleaner.util.ImageManager; 47 import org.eobjects.datacleaner.util.LookAndFeelManager; 48 import org.eobjects.datacleaner.util.WidgetFactory; 39 49 import org.eobjects.datacleaner.widgets.Alignment; 40 50 import org.eobjects.datacleaner.widgets.ChangeRequirementButton; 51 import org.eobjects.datacleaner.widgets.DCLabel; 41 52 import org.eobjects.datacleaner.widgets.properties.PropertyWidget; 42 53 import org.eobjects.datacleaner.widgets.properties.PropertyWidgetFactory; 43 54 import org.eobjects.datacleaner.widgets.properties.PropertyWidgetPanel; 55 56 import com.google.inject.Guice; 57 import com.google.inject.Injector; 44 58 45 59 public class FilterJobBuilderPanel extends DCPanel implements FilterJobBuilderPresenter { … … 84 98 85 99 final DCPanel outcomePanel = new DCPanel(); 86 outcomePanel.setBorder(new TitledBorder(" Outcomes"));100 outcomePanel.setBorder(new TitledBorder("This filter categorizes records as:")); 87 101 88 102 final Set<String> categoryNames = _descriptor.getOutcomeCategoryNames(); … … 90 104 final JButton outcomeButton = new JButton(categoryName, imageManager.getImageIcon( 91 105 "images/component-types/filter-outcome.png", IconUtils.ICON_SIZE_SMALL)); 92 AnalysisJobBuilder analysisJobBuilder = _filterJobBuilder.getAnalysisJobBuilder(); 93 outcomeButton .addActionListener(new DisplayOutputWritersForFilterOutcomeActionListener(_filterJobBuilder94 . getAnalysisJobBuilder().getConfiguration(), analysisJobBuilder,_filterJobBuilder, categoryName));106 107 outcomeButton 108 .addActionListener(new DisplayOptionsForFilterOutcomeActionListener(_filterJobBuilder, categoryName)); 95 109 outcomePanel.add(outcomeButton); 96 110 } 111 112 final JButton helpButton = WidgetFactory.createSmallButton("images/widgets/help.png"); 113 helpButton.addActionListener(new ActionListener() { 114 @Override 115 public void actionPerformed(ActionEvent e) { 116 DCPanel messagePanel = new DCPanel(); 117 messagePanel.setLayout(new BorderLayout()); 118 messagePanel.add(new JLabel(imageManager.getImageIcon("images/help/help_requirement_mapping.png")), 119 BorderLayout.WEST); 120 messagePanel.add(DCLabel 121 .darkMultiLine("Filter outcomes can be set as requirements<br>" 122 + "for other components, using the<br>" + "\"(no requirement specified)\" buttons.<br><br>" 123 + "You can also click the categories directly to eg.<br>" 124 + "write categorized records or to map them<br>" 125 + "as requirements for existing or new components.")); 126 JOptionPane.showMessageDialog(FilterJobBuilderPanel.this, messagePanel, 127 "Help: Filter categories / outcomes", JOptionPane.PLAIN_MESSAGE); 128 } 129 }); 130 outcomePanel.add(helpButton); 97 131 98 132 final DCPanel buttonPanel = DCPanel.flow(Alignment.RIGHT, removeButton, _requirementButton); … … 101 135 add(buttonPanel, BorderLayout.NORTH); 102 136 add(panel, BorderLayout.CENTER); 103 add( DCPanel.flow(Alignment.CENTER, outcomePanel), BorderLayout.SOUTH);137 add(outcomePanel, BorderLayout.SOUTH); 104 138 } 105 139 … … 143 177 getPropertyWidgetFactory().onConfigurationChanged(); 144 178 } 179 180 /** 181 * Constructor used only for UI testing and improvement purposes 182 * 183 * @param args 184 */ 185 public static void main(String[] args) { 186 LookAndFeelManager.getInstance().init(); 187 188 DCModule module = new DCModule(new File(".")); 189 Injector injector = Guice.createInjector(module); 190 191 AnalysisJobBuilder ajb = injector.getInstance(AnalysisJobBuilder.class); 192 193 ajb.setDatastore("orderdb"); 194 ajb.addSourceColumns("PUBLIC.EMPLOYEES.EMPLOYEENUMBER"); 195 ajb.addSourceColumns("PUBLIC.EMPLOYEES.EMAIL"); 196 197 FilterJobBuilder<NotNullFilter, ValidationCategory> fjb = ajb.addFilter(NotNullFilter.class); 198 InjectorBuilder injectorBuilder = injector.getInstance(InjectorBuilder.class); 199 PropertyWidgetFactory propertyWidgetFactory = injectorBuilder.with( 200 PropertyWidgetFactory.TYPELITERAL_BEAN_JOB_BUILDER, fjb).getInstance(PropertyWidgetFactory.class); 201 202 FilterJobBuilderPanel panel = new FilterJobBuilderPanel(fjb, propertyWidgetFactory); 203 JFrame frame = new JFrame("test"); 204 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 205 frame.getContentPane().add(panel); 206 frame.pack(); 207 frame.setVisible(true); 208 } 145 209 } -
DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/panels/TransformerJobBuilderPanel.java
r2847 r3052 53 53 private final ChangeRequirementButton _requirementButton; 54 54 private final JButton _previewButton; 55 private final JButton _write OutputButton;55 private final JButton _writeDataButton; 56 56 private final WindowContext _windowContext; 57 57 … … 77 77 _outputColumnsTable = new ColumnListTable(outputColumns, getAnalysisJobBuilder(), false, _windowContext); 78 78 79 _write OutputButton = new JButton("Write data",79 _writeDataButton = new JButton("Write data", 80 80 imageManager.getImageIcon("images/component-types/type_output_writer.png")); 81 _write OutputButton81 _writeDataButton 82 82 .addActionListener(new DisplayOutputWritersForTransformedDataActionListener(_transformerJobBuilder)); 83 83 … … 90 90 final DCPanel bottomButtonPanel = new DCPanel(); 91 91 bottomButtonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT, 4, 0)); 92 bottomButtonPanel.add(_write OutputButton);92 bottomButtonPanel.add(_writeDataButton); 93 93 bottomButtonPanel.add(_previewButton); 94 94 _outputColumnsTable.add(bottomButtonPanel, BorderLayout.SOUTH); -
DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/widgets/DCWindowMenuBar.java
r2963 r3052 33 33 import javax.swing.JMenuItem; 34 34 35 import org.eobjects.analyzer.configuration.AnalyzerBeansConfiguration;36 35 import org.eobjects.analyzer.job.builder.AnalysisJobBuilder; 37 import org.eobjects.datacleaner.actions. AbstractDisplayOutputWritersActionListener;36 import org.eobjects.datacleaner.actions.DisplayOutputWritersAction; 38 37 import org.eobjects.datacleaner.actions.NewAnalysisJobActionListener; 39 38 import org.eobjects.datacleaner.actions.OpenAnalysisJobActionListener; … … 62 61 private final Provider<OptionsDialog> _optionsDialogProvider; 63 62 private final JMenu _writeDataMenu; 64 private final Provider<AnalyzerBeansConfiguration> _configurationProvider;65 63 66 64 @Inject … … 68 66 final Provider<ReferenceDataDialog> referenceDataDialogProvider, 69 67 NewAnalysisJobActionListener newAnalysisJobActionListener, 70 Provider<AnalyzerBeansConfiguration> configurationProvider,71 68 OpenAnalysisJobActionListener openAnalysisJobActionListener, Provider<OptionsDialog> optionsDialogProvider) { 72 69 super(); 73 70 _windowContext = windowContext; 74 _configurationProvider = configurationProvider;75 71 _referenceDataDialogProvider = referenceDataDialogProvider; 76 72 _optionsDialogProvider = optionsDialogProvider; … … 218 214 219 215 public void setAnalysisJobBuilder(AnalysisJobBuilder analysisJobBuilder) { 220 List<JMenuItem> menuItems = new AbstractDisplayOutputWritersActionListener(_configurationProvider.get(), 221 analysisJobBuilder).createMenuItems(); 216 List<JMenuItem> menuItems = new DisplayOutputWritersAction(analysisJobBuilder).createMenuItems(); 222 217 _writeDataMenu.removeAll(); 223 218 for (JMenuItem menuItem : menuItems) { -
DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/widgets/DescriptorPopupMenu.java
r2760 r3052 50 50 51 51 private static final Logger logger = LoggerFactory.getLogger(DescriptorPopupMenu.class); 52 52 53 private final List<? extends E> _descriptors; 53 54 -
DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/widgets/HelpIcon.java
r1577 r3052 22 22 import java.awt.BorderLayout; 23 23 24 import javax.swing.Icon; 24 25 import javax.swing.JLabel; 25 26 import javax.swing.JToolTip; … … 40 41 private static final ImageManager imageManager = ImageManager.getInstance(); 41 42 private final String _helpMessage; 43 private final Icon _tooltipIcon; 44 45 public HelpIcon(String helpMessage, Icon tooltipIcon) { 46 super(imageManager.getImageIcon("images/widgets/help.png", IconUtils.ICON_SIZE_SMALL)); 47 _tooltipIcon = tooltipIcon; 48 _helpMessage = helpMessage; 49 ToolTipManager.sharedInstance().registerComponent(this); 50 } 42 51 43 52 public HelpIcon(String helpMessage) { 44 super(imageManager.getImageIcon("images/widgets/help.png", IconUtils.ICON_SIZE_SMALL)); 45 _helpMessage = helpMessage; 46 ToolTipManager.sharedInstance().registerComponent(this); 53 this(helpMessage, imageManager.getImageIcon("images/widgets/help.png")); 47 54 } 48 55 … … 59 66 60 67 panel.setLayout(new BorderLayout()); 61 panel.add(new JLabel( imageManager.getImageIcon("images/widgets/help.png")), BorderLayout.WEST);68 panel.add(new JLabel(_tooltipIcon), BorderLayout.WEST); 62 69 63 70 DCLabel descriptionLabel = DCLabel.brightMultiLine(_helpMessage); -
DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/widgets/properties/AbstractPropertyWidget.java
r2854 r3052 25 25 26 26 import javax.swing.JComponent; 27 import javax.swing.border.Border; 27 28 28 29 import org.eobjects.analyzer.descriptors.ConfiguredPropertyDescriptor; … … 134 135 } 135 136 137 protected void setBorder(Border border) { 138 _panel.setBorder(border); 139 } 140 136 141 @Override 137 142 public final JComponent getWidget() { -
DataCleaner/trunk/core/src/main/java/org/eobjects/datacleaner/widgets/properties/MultipleInputColumnsPropertyWidget.java
r2942 r3052 36 36 import javax.swing.JCheckBox; 37 37 import javax.swing.JComponent; 38 import javax.swing.border.CompoundBorder; 39 import javax.swing.border.EmptyBorder; 40 import javax.swing.border.EtchedBorder; 41 import javax.swing.border.MatteBorder; 38 42 import javax.swing.event.DocumentEvent; 39 43 … … 72 76 SourceColumnChangeListener, TransformerChangeListener { 73 77 78 // border for the button panel and search box to make them "indented" 79 // similar to the check boxes. 80 private static final EmptyBorder _indentBorder = new MatteBorder(1, 17, 0, 1, WidgetUtils.BG_COLOR_BRIGHT); 81 74 82 private final Listener<InputColumn<?>> checkBoxListener = new Listener<InputColumn<?>>() { 75 83 @Override … … 106 114 ConfiguredPropertyDescriptor propertyDescriptor) { 107 115 super(beanJobBuilder, propertyDescriptor); 116 setBorder(new EtchedBorder(EtchedBorder.LOWERED)); 108 117 _checkBoxes = new LinkedHashMap<InputColumn<?>, DCCheckBox<InputColumn<?>>>(); 109 118 _checkBoxDecorations = new IdentityHashMap<DCCheckBox<InputColumn<?>>, JComponent>(); … … 115 124 116 125 _searchDatastoreTextField = WidgetFactory.createTextField("Search/filter columns"); 117 _searchDatastoreTextField.setBorder( WidgetUtils.BORDER_THIN);126 _searchDatastoreTextField.setBorder(new CompoundBorder(_indentBorder, WidgetUtils.BORDER_THIN)); 118 127 _searchDatastoreTextField.getDocument().addDocumentListener(new DCDocumentListener() { 119 128 @Override … … 141 150 _buttonPanel = new DCPanel(); 142 151 _buttonPanel.setLayout(new HorizontalLayout(2)); 152 _buttonPanel.setBorder(_indentBorder); 143 153 144 154 JButton selectAllButton = new JButton("Select all"); 155 selectAllButton.setFont(WidgetUtils.FONT_SMALL); 145 156 selectAllButton.addActionListener(selectAllActionListener); 146 157 _buttonPanel.add(selectAllButton); 147 158 148 159 JButton selectNoneButton = new JButton("Select none"); 160 selectNoneButton.setFont(WidgetUtils.FONT_SMALL); 149 161 selectNoneButton.addActionListener(selectNoneActionListener); 150 162 _buttonPanel.add(selectNoneButton);
Note: See TracChangeset
for help on using the changeset viewer.
