/** * Copyright (C) 2001-2017 by RapidMiner and the contributors * * Complete list of developers available at our web site: * * http://rapidminer.com * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.operator.nio; import com.rapidminer.gui.tools.ProgressThread; import com.rapidminer.gui.tools.ProgressThreadListener; import com.rapidminer.gui.tools.ResourceLabel; import java.awt.CardLayout; import javax.swing.JComponent; import javax.swing.JPanel; /** * This class is a swing component which shows a loading panel when you call initLoading() and is * able to switch to the loaded content when you call finishedLoading() * * @author Dominik Halfkann */ public class LoadingContentPane extends JPanel implements ProgressThreadListener { private static final long serialVersionUID = 1L; private String label; private boolean loading = false; public LoadingContentPane(String label, JComponent content) { this.label = label; setLayout(new CardLayout()); add(createDummyPanel()); add(content); } private JPanel createDummyPanel() { JPanel dummy = new JPanel(); dummy.add(new ResourceLabel(label)); return dummy; } /** Initializes the LoadingContentPane with a loading screen until loadingFinished() is called. **/ public void init() { ((CardLayout) (getLayout())).first(this); loading = true; } /** * Initializes the LoadingContentPane with a loading screen and waits for the ProgressThread to * be finished. **/ public void init(ProgressThread thread) { ((CardLayout) (getLayout())).first(this); loading = true; thread.addProgressThreadListener(this); } /** * Tells the LoadingContentPane that the content has finished loading, switches to the actual * content pane. **/ public void loadingFinished() { if (loading) { ((CardLayout) (getLayout())).last(LoadingContentPane.this); loading = false; } } /** * This method should only be called from the ProgressThread when it's finished. Causes the * LoadingContentPane to switch to the actual content pane. **/ @Override public void threadFinished(ProgressThread thread) { if (loading) { ((CardLayout) (getLayout())).last(LoadingContentPane.this); loading = false; } thread.removeProgressThreadListener(this); } }