List of usage examples for javax.swing.border CompoundBorder CompoundBorder
@ConstructorProperties({ "outsideBorder", "insideBorder" }) public CompoundBorder(Border outsideBorder, Border insideBorder)
From source file:com.diversityarrays.kdxplore.specgroup.SpecimenGroupEditor.java
private JComponent createBottomComponent() { // =========//from w w w . j a va 2s. c o m specimenTableModel = new SpecimenTableModel(null); specimenTableModel.addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent e) { exportSpecimenList.setEnabled(specimenTableModel.getRowCount() > 0); } }); specimenTable = new JTable(specimenTableModel); specimenTable.setAutoCreateRowSorter(true); specimenTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { deleteSpecimenFromList.setEnabled(specimenTable.getSelectedRowCount() > 0); } } }); // specimenTableModel.addTableModelListener(new TableModelListener() { // @Override // public void tableChanged(TableModelEvent e) { // fileDropTarget.setVisible(specimenTableModel.getRowCount() > 0); // } // }); CompoundBorder border = new CompoundBorder(new LineBorder(Color.DARK_GRAY), new EmptyBorder(4, 2, 4, 2)); fileDropTarget.setBorder(border); fileDropTarget.setBackground(Color.LIGHT_GRAY); // fileDropTarget.setVisible(false); deleteSpecimenFromList.setEnabled(false); TitledTablePanel specimenTablePanel = new TitledTablePanel("Specimen", specimenTable, "Download from database,\n Drag/drop Specimens or Drag/drop CSV File above"); // saveAction.setEnabled(false); // downloadSpecimenList.setEnabled(false); exportSpecimenList.setEnabled(false); Box otherBox = Box.createHorizontalBox(); otherBox.add(downloadSpecimensButton); otherBox.add(fileDropTarget); otherBox.add(Box.createHorizontalGlue()); otherBox.add(new JButton(exportSpecimenList)); otherBox.add(Box.createHorizontalGlue()); otherBox.add(new JLabel("(local)")); otherBox.add(new JButton(deleteSpecimenFromList)); JPanel containerPanel2 = new JPanel(new BorderLayout()); containerPanel2.add(otherBox, BorderLayout.NORTH); containerPanel2.add(specimenTablePanel, BorderLayout.CENTER); fileDropTarget.setTransferHandler(flth); // TableTransferHandler tth2 = TableTransferHandler.initialiseForCopySelectAll(specimenTable, true); // ChainingTransferHandler cth = new ChainingTransferHandler(flth, genotypeTransferHandler, tth2); TransferHandler cth = genotypeTransferHandler; // ChainingTH cth = new ChainingTH(genotypeTransferHandler, tth2); specimenTablePanel.scrollPane.setTransferHandler(cth); specimenTablePanel.setTransferHandler(cth); specimenTable.setTransferHandler(cth); specimenTable.setDragEnabled(true); return containerPanel2; }
From source file:au.com.jwatmuff.eventmanager.gui.main.LoadCompetitionWindow.java
private void loadBackupButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadBackupButtonActionPerformed File databaseStore = new File(Main.getWorkingDirectory(), "comps"); JFileChooser chooser = new JFileChooser(); chooser.setFileFilter(new FileNameExtensionFilter("Event Manager Files", "evm")); JPanel optionsPanel = new JPanel(); optionsPanel.setBorder(/*from w w w .j ava 2 s.co m*/ new CompoundBorder(new EmptyBorder(0, 10, 0, 10), new TitledBorder("Load backup options"))); JCheckBox preserveIDCheckbox = new JCheckBox("Preserve competition ID"); optionsPanel.add(preserveIDCheckbox); chooser.setAccessory(optionsPanel); if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { /* input zip file */ File file = chooser.getSelectedFile(); /* construct output directory */ File dir = new File(databaseStore, file.getName()); int suffix = 0; while (dir.exists()) { suffix++; dir = new File(databaseStore, file.getName() + "_" + suffix); } /* unzip */ try { ZipUtils.unzipFile(dir, file); /* change id */ Properties props = new Properties(); FileReader fr = new FileReader(new File(dir, "info.dat")); props.load(fr); fr.close(); if (!preserveIDCheckbox.isSelected()) { props.setProperty("UUID", UUID.randomUUID().toString()); } props.setProperty("name", props.getProperty("name") + " - " + dateFormat.format(new Date())); FileWriter fw = new FileWriter(new File(dir, "info.dat")); props.store(fw, ""); fw.close(); /* update gui */ checkDatabasesExecutor.schedule(checkDatabasesTask, 0, TimeUnit.MILLISECONDS); } catch (Exception e) { GUIUtils.displayError(null, "Error while opening file: " + e.getMessage()); } } }
From source file:com.maxl.java.amikodesk.AMiKoDesk.java
private static void setupToggleButton(JToggleButton button) { button.setBackground(m_but_color_bg); button.setFocusPainted(false);//from w w w . j a v a 2 s . c o m button.setBorder(new CompoundBorder(new LineBorder(m_but_color_bg), new EmptyBorder(0, 3, 0, 0))); button.setHorizontalAlignment(SwingConstants.LEFT); }
From source file:com.diversityarrays.kdxplore.curate.TrialDataEditor.java
private List<JButton> createVisualisationButtons() { List<JButton> visButtons = new ArrayList<>(); for (final VisualisationTool tool : visualisationTools) { JButton button = new JButton(); button.setBorder(new CompoundBorder(new EmptyBorder(2, 2, 2, 2), BorderFactory.createBevelBorder(BevelBorder.RAISED))); Icon icon = tool.getToolIcon(); if (icon != null) { button.setIcon(icon);// w ww. j a va2s . c o m } else { button.setName(tool.getToolButtonName()); } boolean onlyForDeveloper = false; VisualisationToolActionListener actionListener = new VisualisationToolActionListener( TrialDataEditor.this, getTitle(), onlyForDeveloper, curationContext, tool); button.addActionListener(actionListener); visButtons.add(button); button.setText(tool.getToolName()); } return visButtons; }
From source file:org.colombbus.tangara.ConfigurationWindow.java
/** * This method initializes scrollPane/*from w ww. j a va 2s. c o m*/ * * @return javax.swing.JScrollPane */ private JScrollPane getScrollPane() { if (scrollPane == null) { scrollPane = new JScrollPane(propertiesTable); EmptyBorder borderPart1 = createEmptyBorder(); LineBorder borderPart2 = createLineBorder(); CompoundBorder border = new CompoundBorder(borderPart1, borderPart2); scrollPane.setBorder(border); } return scrollPane; }
From source file:org.datacleaner.panels.WelcomePanel.java
private JComponent createContentPanel() { JComponent result = null;/*w w w . ja v a 2s . c o m*/ final String welcomePanelClassName = SystemProperties.getString(SystemProperties.UI_DESKTOP_WELCOME_PANEL, null); if (!Strings.isNullOrEmpty(welcomePanelClassName)) { final Injector injector = _dcModule.createInjectorBuilder().with(WelcomePanel.class, this) .createInjector(); try { @SuppressWarnings("unchecked") final Class<? extends JComponent> componentClass = (Class<? extends JComponent>) Class .forName(welcomePanelClassName); result = injector.getInstance(componentClass); } catch (Exception e) { logger.error("Failed to instantiate welcome panel class: {}", welcomePanelClassName, e); } } if (result == null) { result = new DCPanel(); if (Version.isCommunityEdition()) { final JXEditorPane editorPane = new JXEditorPane("text/html", "You're now using the <b>Community Edition</b> of DataCleaner.<br/><br/>" + "We hope that you enjoy this free product. We encourage you to also check out the " + "commercial DataCleaner editions which feature added functionality, " + "helpful getting started wizards and commercial support. " + "You can find more information about them online."); editorPane.setEditable(false); editorPane.setOpaque(false); editorPane.setFont(WidgetUtils.FONT_HEADER2); editorPane.setPreferredSize(new Dimension(DCSplashPanel.WIDTH_CONTENT, 120)); final JButton tryProfessionalButton = WidgetFactory.createDefaultButton("Try professional edition", IconUtils.APPLICATION_ICON); tryProfessionalButton .addActionListener(new OpenBrowserAction("http://datacleaner.org/get_datacleaner")); final JButton readMoreButton = WidgetFactory.createDefaultButton("Compare the editions", IconUtils.WEBSITE); readMoreButton.addActionListener(new OpenBrowserAction("http://datacleaner.org/editions")); final JButton discussionForumButton = WidgetFactory .createDefaultButton("Visit the discussion forum", "images/menu/forum.png"); discussionForumButton.setToolTipText( "Visit the online discussion forum for questions and answers in the community"); final OpenBrowserAction forumActionListener = new OpenBrowserAction("http://datacleaner.org/forum"); discussionForumButton.addActionListener(forumActionListener); final JButton twitterButton = WidgetFactory.createDefaultButton(null, "images/menu/twitter.png"); twitterButton.setToolTipText("Spread the message about #DataCleaner on Twitter"); twitterButton.addActionListener(new OpenBrowserAction("https://twitter.com/intent/tweet?text=" + UrlEscapers.urlFormParameterEscaper().escape("I'm using @DataCleaner (v. " + Version.getVersion() + ") for some really fancy #dataquality stuff!"))); final JButton linkedInButton = WidgetFactory.createDefaultButton(null, "images/menu/linkedin.png"); linkedInButton.setToolTipText("Join our LinkedIn group of users and professionals"); linkedInButton .addActionListener(new OpenBrowserAction("http://www.linkedin.com/groups?gid=3352784")); final JLabel loveFeedbackAnimation = new JLabel( ImageManager.get().getImageIcon("images/window/we_love_community_and_feedback.gif"), JLabel.LEFT); loveFeedbackAnimation.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); loveFeedbackAnimation.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { forumActionListener.actionPerformed(null); } }); final DCPanel innerPanel = new DCPanel(); innerPanel.setLayout(new VerticalLayout()); innerPanel.setBorder( new CompoundBorder(WidgetUtils.BORDER_LIST_ITEM_LEFT_ONLY, new EmptyBorder(0, 20, 0, 0))); innerPanel.add(editorPane); innerPanel.add(DCPanel.flow(tryProfessionalButton, readMoreButton)); innerPanel.add(Box.createVerticalStrut(80)); innerPanel.add(loveFeedbackAnimation); innerPanel.add(Box.createVerticalStrut(20)); innerPanel.add(DCPanel.flow(discussionForumButton, twitterButton, linkedInButton)); innerPanel.add(Box.createVerticalStrut(5)); result.setLayout(new VerticalLayout()); result.add(Box.createVerticalStrut(100)); result.add(innerPanel); } } return wrapContent(result); }
From source file:org.datacleaner.widgets.properties.MultipleInputColumnsPropertyWidget.java
@Inject public MultipleInputColumnsPropertyWidget(ComponentBuilder componentBuilder, ConfiguredPropertyDescriptor propertyDescriptor) { super(componentBuilder, propertyDescriptor); // setBorder(WidgetUtils.BORDER_LIST_ITEM); _checkBoxes = new LinkedHashMap<>(); _checkBoxDecorations = new IdentityHashMap<>(); _firstUpdate = true;//from ww w. ja va2s . c o m _dataType = propertyDescriptor.getTypeArgument(0); getAnalysisJobBuilder().addSourceColumnChangeListener(this); getAnalysisJobBuilder().addTransformerChangeListener(this); setLayout(new VerticalLayout(2)); _searchDatastoreTextField = WidgetFactory.createTextField("Search/filter columns"); _searchDatastoreTextField.setBorder( new CompoundBorder(WidgetUtils.BORDER_CHECKBOX_LIST_INDENTATION, WidgetUtils.BORDER_THIN)); _searchDatastoreTextField.getDocument().addDocumentListener(new DCDocumentListener() { @Override protected void onChange(DocumentEvent event) { String text = _searchDatastoreTextField.getText(); if (StringUtils.isNullOrEmpty(text)) { // when there is no search query, set all datastores // visible for (JCheckBox cb : _checkBoxes.values()) { cb.setVisible(true); } } else { // do a case insensitive search text = text.trim().toLowerCase(); for (JCheckBox cb : _checkBoxes.values()) { String name = cb.getText().toLowerCase(); cb.setVisible(name.contains(text)); } } } }); if (_dataType == null || _dataType == Object.class) { _notAvailableCheckBox = new DCCheckBox<>( "<html><font color=\"gray\">- no columns available -</font></html>", false); } else { _notAvailableCheckBox = new DCCheckBox<>("<html><font color=\"gray\">- no <i>" + LabelUtils.getDataTypeLabel(_dataType) + "</i> columns available -</font></html>", false); } _notAvailableCheckBox.setEnabled(false); _buttonPanel = new DCPanel(); _buttonPanel.setLayout(new HorizontalLayout(2)); _buttonPanel.setBorder(WidgetUtils.BORDER_CHECKBOX_LIST_INDENTATION); JButton selectAllButton = WidgetFactory.createDefaultButton("Select all"); selectAllButton.setFont(WidgetUtils.FONT_SMALL); selectAllButton.addActionListener(selectAllActionListener); _buttonPanel.add(selectAllButton); JButton selectNoneButton = WidgetFactory.createDefaultButton("Select none"); selectNoneButton.setFont(WidgetUtils.FONT_SMALL); selectNoneButton.addActionListener(selectNoneActionListener); _buttonPanel.add(selectNoneButton); if (propertyDescriptor.isArray()) { if (_dataType == String.class || _dataType == Object.class) { final JButton expressionColumnButton = WidgetFactory .createSmallButton(IconUtils.MODEL_COLUMN_EXPRESSION); expressionColumnButton.setToolTipText("Create expression/value based column"); expressionColumnButton .addActionListener(AddExpressionBasedColumnActionListener.forMultipleColumns(this)); _buttonPanel.add(expressionColumnButton); } final JButton reorderColumnsButton = WidgetFactory.createSmallButton(IconUtils.ACTION_REORDER_COLUMNS); reorderColumnsButton.setToolTipText("Reorder columns"); reorderColumnsButton.addActionListener(new ReorderColumnsActionListener(this)); _buttonPanel.add(reorderColumnsButton); } add(_buttonPanel); add(_searchDatastoreTextField); }
From source file:org.datacleaner.windows.AnalysisJobBuilderWindowImpl.java
private JToggleButton createViewToggleButton(final String text, final String iconPath) { final ImageIcon icon = imageManager.getImageIcon(iconPath); final JToggleButton button = new JToggleButton(text, icon); button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); button.setFont(WidgetUtils.FONT_SMALL); button.setForeground(WidgetUtils.BG_COLOR_BRIGHTEST); button.setBackground(WidgetUtils.BG_COLOR_DARK); button.setBorderPainted(false);//from w ww. ja v a2 s .c o m button.setBorder(new CompoundBorder(WidgetUtils.BORDER_THIN, new EmptyBorder(0, 4, 0, 4))); return button; }
From source file:org.datacleaner.windows.ResultWindow.java
/** * * @param configuration// w w w . j ava2 s . c o m * @param job * either this or result must be available * @param result * either this or job must be available * @param jobFilename * @param windowContext * @param userPreferences * @param rendererFactory */ @Inject protected ResultWindow(DataCleanerConfiguration configuration, @Nullable AnalysisJob job, @Nullable AnalysisResult result, @Nullable @JobFile FileObject jobFilename, WindowContext windowContext, UserPreferences userPreferences, RendererFactory rendererFactory) { super(windowContext); final boolean running = (result == null); _resultPanels = new IdentityHashMap<>(); _configuration = configuration; _job = job; _jobFilename = jobFilename; _userPreferences = userPreferences; _rendererFactory = rendererFactory; final Ref<AnalysisResult> resultRef = new Ref<AnalysisResult>() { @Override public AnalysisResult get() { return getResult(); } }; Border buttonBorder = new CompoundBorder(WidgetUtils.BORDER_LIST_ITEM_SUBTLE, new EmptyBorder(10, 4, 10, 4)); _cancelButton = WidgetFactory.createDefaultButton("Cancel job", IconUtils.ACTION_STOP); _cancelButton.setHorizontalAlignment(SwingConstants.LEFT); _cancelButton.setBorder(buttonBorder); _saveResultsPopupButton = WidgetFactory.createDefaultPopupButton("Save results", IconUtils.ACTION_SAVE_DARK); _saveResultsPopupButton.setHorizontalAlignment(SwingConstants.LEFT); _saveResultsPopupButton.setBorder(buttonBorder); _saveResultsPopupButton.setMenuPosition(MenuPosition.TOP); _saveResultsPopupButton.getMenu().setBorder(new MatteBorder(1, 0, 0, 1, WidgetUtils.BG_COLOR_MEDIUM)); JMenuItem saveAsFileItem = WidgetFactory.createMenuItem("Save as result file", IconUtils.ACTION_SAVE_DARK); saveAsFileItem.addActionListener(new SaveAnalysisResultActionListener(resultRef, _userPreferences)); saveAsFileItem.setBorder(buttonBorder); _saveResultsPopupButton.getMenu().add(saveAsFileItem); JMenuItem exportToHtmlItem = WidgetFactory.createMenuItem("Export to HTML", IconUtils.WEBSITE); exportToHtmlItem.addActionListener( new ExportResultToHtmlActionListener(resultRef, _configuration, _userPreferences)); exportToHtmlItem.setBorder(buttonBorder); _saveResultsPopupButton.getMenu().add(exportToHtmlItem); JMenuItem publishToServerItem = WidgetFactory.createMenuItem("Publish to server", IconUtils.MENU_DQ_MONITOR); publishToServerItem.addActionListener(new PublishResultToMonitorActionListener(getWindowContext(), _userPreferences, resultRef, _jobFilename)); publishToServerItem.setBorder(buttonBorder); _saveResultsPopupButton.getMenu().add(publishToServerItem); _tabbedPane = new VerticalTabbedPane() { private static final long serialVersionUID = 1L; @Override protected JComponent wrapInCollapsiblePane(final JComponent originalPanel) { DCPanel buttonPanel = new DCPanel(); buttonPanel.setLayout(new VerticalLayout()); buttonPanel.setBorder(new MatteBorder(1, 0, 0, 0, WidgetUtils.BG_COLOR_MEDIUM)); buttonPanel.add(_saveResultsPopupButton); buttonPanel.add(_cancelButton); DCPanel wrappedPanel = new DCPanel(); wrappedPanel.setLayout(new BorderLayout()); wrappedPanel.add(originalPanel, BorderLayout.CENTER); wrappedPanel.add(buttonPanel, BorderLayout.SOUTH); return super.wrapInCollapsiblePane(wrappedPanel); } }; final Dimension size = getDefaultWindowSize(); _windowSizePreference = new WindowSizePreferences(_userPreferences, getClass(), size.width, size.height); _progressInformationPanel = new ProgressInformationPanel(running); _tabbedPane.addTab("Progress information", imageManager.getImageIcon("images/model/progress_information.png", IconUtils.ICON_SIZE_TAB), _progressInformationPanel); for (Func<ResultWindow, JComponent> pluggableComponent : PLUGGABLE_BANNER_COMPONENTS) { JComponent component = pluggableComponent.eval(this); if (component != null) { if (component instanceof AbstractButton) { AbstractButton button = (AbstractButton) component; JMenuItem menuItem = WidgetFactory.createMenuItem(button.getText(), button.getIcon()); for (ActionListener listener : button.getActionListeners()) { menuItem.addActionListener(listener); } menuItem.setBorder(buttonBorder); _saveResultsPopupButton.getMenu().add(menuItem); } else if (component instanceof JMenuItem) { // TODO: Not possible. JMenuItem is a subclass of AbstractButton. Reorder or remove? JMenuItem menuItem = (JMenuItem) component; menuItem.setBorder(buttonBorder); _saveResultsPopupButton.getMenu().add(menuItem); } } } if (running) { // run the job in a swing worker _result = null; _worker = new AnalysisRunnerSwingWorker(_configuration, _job, this); _cancelButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { _worker.cancelIfRunning(); } }); } else { // don't add the progress information, simply render the job asap _result = result; _worker = null; final Map<ComponentJob, AnalyzerResult> map = result.getResultMap(); for (Entry<ComponentJob, AnalyzerResult> entry : map.entrySet()) { final ComponentJob componentJob = entry.getKey(); final AnalyzerResult analyzerResult = entry.getValue(); addResult(componentJob, analyzerResult); } _progressInformationPanel.onSuccess(); WidgetUtils.invokeSwingAction(new Runnable() { @Override public void run() { if (_tabbedPane.getTabCount() > 1) { // switch to the first available result panel _tabbedPane.setSelectedIndex(1); } } }); } updateButtonVisibility(running); }
From source file:org.eobjects.datacleaner.panels.WelcomePanel.java
@Inject protected WelcomePanel(AnalyzerBeansConfiguration configuration, AnalysisJobBuilderWindow analysisJobBuilderWindow, DCGlassPane glassPane, Provider<OptionsDialog> optionsDialogProvider, InjectorBuilder injectorBuilder, OpenAnalysisJobActionListener openAnalysisJobActionListener, DatabaseDriverCatalog databaseDriverCatalog, UserPreferences userPreferences) { super();//w ww .ja v a 2 s. co m _openAnalysisJobActionListener = openAnalysisJobActionListener; _configuration = configuration; _datastorePanels = new ArrayList<DatastorePanel>(); _datastoreCatalog = (MutableDatastoreCatalog) configuration.getDatastoreCatalog(); _analysisJobBuilderWindow = analysisJobBuilderWindow; _glassPane = glassPane; _optionsDialogProvider = optionsDialogProvider; _injectorBuilder = injectorBuilder; _databaseDriverCatalog = databaseDriverCatalog; _userPreferences = userPreferences; _browseJobsButton = new JButton("Browse jobs", imageManager.getImageIcon(IconUtils.MENU_OPEN, IconUtils.ICON_SIZE_SMALL)); _browseJobsButton.setMargin(new Insets(1, 1, 1, 4)); _browseJobsButton.addActionListener(openAnalysisJobActionListener); // initialize "analyze" button _analyzeButton = new JButton("Build job", imageManager.getImageIcon(IconUtils.MODEL_JOB, IconUtils.ICON_SIZE_SMALL)); _analyzeButton.setMargin(new Insets(1, 1, 1, 1)); _analyzeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (DatastorePanel datastorePanel : _datastorePanels) { if (datastorePanel.isSelected()) { Datastore datastore = datastorePanel.getDatastore(); // open the connection here, to make any connection // issues apparent early try (DatastoreConnection datastoreConnection = datastore.openConnection()) { datastoreConnection.getDataContext().getSchemaNames(); _analysisJobBuilderWindow.setDatastore(datastore); } return; } } } }); // initialize search text field _searchDatastoreTextField = WidgetFactory.createTextField("Search/filter datastores"); _searchDatastoreTextField .setBorder(new CompoundBorder(new EmptyBorder(4, 0, 0, 0), WidgetUtils.BORDER_THIN)); _searchDatastoreTextField.setOpaque(false); _searchDatastoreTextField.getDocument().addDocumentListener(new DCDocumentListener() { @Override protected void onChange(DocumentEvent event) { String text = _searchDatastoreTextField.getText(); if (StringUtils.isNullOrEmpty(text)) { // when there is no search query, set all datastores // visible for (DatastorePanel datastorePanel : _datastorePanels) { datastorePanel.setVisible(true); } } else { // do a case insensitive search text = text.trim().toLowerCase(); for (DatastorePanel datastorePanel : _datastorePanels) { String name = datastorePanel.getDatastore().getName().toLowerCase(); datastorePanel.setVisible(name.indexOf(text) != -1); } selectFirstVisibleDatastore(); } } }); _searchDatastoreTextField.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { clickAnalyzeButton(); } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { selectNextVisibleDatastore(); } else if (e.getKeyCode() == KeyEvent.VK_UP) { selectPreviousVisibleDatastore(); } } }); setLayout(new VerticalLayout(4)); add(Box.createVerticalStrut(10)); final DCLabel jobsHeaderLabel = DCLabel.dark("Jobs"); jobsHeaderLabel.setFont(WidgetUtils.FONT_HEADER1); add(jobsHeaderLabel); _jobsListPanel = new DCPanel(); final GridLayout jobsListLayout = new GridLayout(1, MAX_JOB_PANELS); jobsListLayout.setHgap(10); _jobsListPanel.setBorder(new EmptyBorder(10, 10, 4, 0)); _jobsListPanel.setLayout(jobsListLayout); final List<FileObject> recentJobFiles = getRecentJobFiles(); updateJobsListPanel(recentJobFiles); add(_jobsListPanel); _moreRecentJobsButton = new JButton("More", imageManager.getImageIcon(IconUtils.FILE_FOLDER, IconUtils.ICON_SIZE_SMALL)); _moreRecentJobsButton.setMargin(new Insets(1, 1, 1, 4)); if (recentJobFiles.size() <= MAX_JOB_PANELS) { _moreRecentJobsButton.setEnabled(false); } else { _moreRecentJobsButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { final JPopupMenu popup = new JPopupMenu(); for (int i = 3; i < recentJobFiles.size(); i++) { final FileObject jobFile = recentJobFiles.get(i); final JMenuItem menuItem = new OpenAnalysisJobMenuItem(jobFile, _openAnalysisJobActionListener); popup.add(menuItem); } popup.show(_moreRecentJobsButton, 0, _moreRecentJobsButton.getHeight()); } }); } final DCPanel jobsButtonPanel = new DCPanel(); jobsButtonPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 0)); jobsButtonPanel.add(_moreRecentJobsButton); jobsButtonPanel.add(_browseJobsButton); add(jobsButtonPanel); add(Box.createVerticalStrut(40)); final DCLabel datastoreHeaderLabel = DCLabel.dark("Datastores"); datastoreHeaderLabel.setFont(WidgetUtils.FONT_HEADER1); add(datastoreHeaderLabel); final DCLabel registerNewDatastoreLabel = DCLabel.dark("Register new:"); registerNewDatastoreLabel.setFont(WidgetUtils.FONT_HEADER2); final DCPanel newDatastorePanel = new DCPanel(); newDatastorePanel.setLayout(new VerticalLayout(4)); newDatastorePanel.setBorder(new EmptyBorder(10, 10, 10, 0)); newDatastorePanel.add(registerNewDatastoreLabel); newDatastorePanel.add(createNewDatastorePanel()); add(newDatastorePanel); _datastoreListPanel = new DCPanel(); _datastoreListPanel.setLayout(new VerticalLayout(4)); _datastoreListPanel.setBorder(new EmptyBorder(10, 10, 4, 0)); add(_datastoreListPanel); updateDatastores(); final DCPanel datastoresButtonPanel = new DCPanel(); datastoresButtonPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); datastoresButtonPanel.setBorder(new EmptyBorder(0, 10, 0, 0)); datastoresButtonPanel.add(_analyzeButton); add(datastoresButtonPanel); }