001 /* JAPI - (Yet another (hopefully) useful) Java API
002 *
003 * Copyright (C) 2004-2006 Christian Hujer
004 *
005 * This program is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU General Public License as
007 * published by the Free Software Foundation; either version 2 of the
008 * License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful, but
011 * WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013 * General Public License for more details.
014 *
015 * You should have received a copy of the GNU General Public License
016 * along with this program; if not, write to the Free Software
017 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
018 * 02111-1307, USA.
019 */
020
021 package net.sf.japi.swing;
022
023 import java.awt.BorderLayout;
024 import static java.awt.Color.BLACK;
025 import java.awt.Component;
026 import java.awt.GridLayout;
027 import static javax.swing.BorderFactory.createEmptyBorder;
028 import javax.swing.JDialog;
029 import javax.swing.JFrame;
030 import javax.swing.JLabel;
031 import javax.swing.JPanel;
032 import javax.swing.JProgressBar;
033 import static javax.swing.SwingConstants.CENTER;
034
035 /** ProgressDisplay handles a popup dialog for the mainview
036 * which displays a process progressBar.
037 * @author <a href="mailto:chris@riedquat.de">Christian Hujer</a>
038 */
039 public final class ProgressDisplay extends JDialog implements Progress {
040
041 /** Serial Version UID. */
042 private static final long serialVersionUID = 1L;
043
044 /** The progress progressBar.
045 * @serial include
046 */
047 private final JProgressBar progressBar; // the progress progressBar
048
049 /** The text label.
050 * @serial include
051 */
052 private final JLabel label;
053
054 /** Create a ProgressDisplay.
055 * @param parent Frame to display dialog on
056 * @param title Title string for progress dialog
057 * @param max initial maximum of progress points
058 * @param text the initial label text
059 */
060 public ProgressDisplay(final JFrame parent, final String title, final int max, final String text) {
061 super(parent, title, false);
062 setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); // can't close
063
064 final JPanel panel = new JPanel(new GridLayout(2, 1));
065 panel.setBorder(createEmptyBorder(20, 15, 30, 15));
066 label = new JLabel(text);
067 label.setForeground(BLACK);
068 panel.add(label);
069
070 progressBar = new JProgressBar(0, max);
071 progressBar.setValue(0);
072 progressBar.setStringPainted(true);
073 progressBar.setAlignmentY(CENTER);
074 panel.add(progressBar);
075
076 getContentPane().setLayout(new BorderLayout());
077 getContentPane().add(panel);
078 setSize(300, 140);
079 setLocationRelativeTo(parent);
080
081 setVisible(true);
082 }
083
084 /** {@inheritDoc} */
085 public void finished() {
086 setVisible(false);
087 removeAll();
088 dispose();
089 }
090
091 /** {@inheritDoc} */
092 public void setValue(final int value) {
093 final int max = progressBar.getMaximum();
094 progressBar.setValue(value > max ? max : value);
095 }
096
097 /** {@inheritDoc} */
098 public void setLabel(final String msg, final int max) {
099 label.setText(msg);
100 progressBar.setMaximum(max);
101 progressBar.setValue(0);
102 }
103
104 /** {@inheritDoc} */
105 public Component getParentComponent() {
106 return this;
107 }
108
109 } // class ProgressDisplay