package com.jsonde.gui.action.composite; import com.jsonde.gui.ApplicationUserInterface; import com.jsonde.gui.components.composite.CompositeComponentProvider; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; public class CreateCompositeComponentTabAction extends AbstractAction implements Runnable { private ApplicationUserInterface applicationUserInterface; private CompositeComponentProvider compositeComponentProvider; JPanel panel = new JPanel(new BorderLayout()); public CreateCompositeComponentTabAction( ApplicationUserInterface applicationUserInterface, CompositeComponentProvider compositeComponentProvider) { super(compositeComponentProvider.getTitle(), compositeComponentProvider.getSmallIcon()); putValue(LARGE_ICON_KEY, compositeComponentProvider.getLargeIcon()); this.applicationUserInterface = applicationUserInterface; this.compositeComponentProvider = compositeComponentProvider; panel.add(getWaitComponent(), BorderLayout.CENTER); } private JComponent getWaitComponent() { return new JLabel("Loading..."); } public void actionPerformed(ActionEvent e) { applicationUserInterface.addTab(panel,compositeComponentProvider.getTitle()); new Thread(this).start(); } public void run() { final JComponent component = compositeComponentProvider.createCompositeComponent(); SwingUtilities.invokeLater(new Runnable() { public void run() { panel.removeAll(); panel.add(component, BorderLayout.CENTER); panel.validate(); } }); } }