package org.openswing.swing.miscellaneous.client; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import org.openswing.swing.client.*; import org.openswing.swing.util.client.*; /** * <p>Title: OpenSwing Framework</p> * <p>Description: Panel that contains a progress bar and messages related to progress state.</p> * <p>Copyright: Copyright (C) 2006 Mauro Carniel</p> * * <p> This file is part of OpenSwing Framework. * This library is free software; you can redistribute it and/or * modify it under the terms of the (LGPL) Lesser General Public * License as published by the Free Software Foundation; * * GNU LESSER GENERAL PUBLIC LICENSE * Version 2.1, February 1999 * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * The author may be contacted at: * maurocarniel@tin.it</p> * * @author Mauro Carniel * @version 1.0 */ public class ProgressPanel extends JPanel { BorderLayout borderLayout1 = new BorderLayout(); JPanel titlePanel = new JPanel(); JPanel progressPanel = new JPanel(); GridBagLayout gridBagLayout1 = new GridBagLayout(); ImagePanel imagePanel = null; JLabel labelMainTitle = new JLabel(); JScrollPane scrollPane = new JScrollPane(); JTextArea controlMainMessage = new JTextArea(); GridBagLayout gridBagLayout2 = new GridBagLayout(); JLabel labelProgress = new JLabel(); ProgressBar progressBar = new ProgressBar(); JButton buttonCancel = new JButton(); /** list of JLabels */ private ArrayList messages = new ArrayList(); /** number of labeld added above the progress bar */ private int currentRow = 0; /** * Constructor that can be used with any JFrame. * @param mainTitle main title (showed in BOLD style); this text will be automatically translate, according to ClientSettings content * @param mainMessage main message; this text will be automatically translate, according to ClientSettings content * @param messageLabels list of label texts to set above the progress bar; this text will be automatically translate, according to ClientSettings content * @param minValue minimum value allowed in the progress bar * @param maxValue maximum value allowed in the progress bar * @param boolean showCancelButton flag that indicates if the cancel button must be showed */ public ProgressPanel(String mainTitle,String mainMessage,String[] messageLabels,double minValue,double maxValue,boolean showCancelButton) { progressBar.setMinValue(minValue); progressBar.setMaxValue(maxValue); try { jbInit(); // set text content... labelMainTitle.setText(ClientSettings.getInstance().getResources().getResource(mainTitle)); controlMainMessage.setFont(new JLabel().getFont()); controlMainMessage.setBackground(progressPanel.getBackground()); for(int i=0;i<messageLabels.length;i++) { JLabel label1a = new JLabel(ClientSettings.getInstance().getResources().getResource(messageLabels[i])); JLabel label1b = new JLabel(); messages.add(label1b); progressPanel.add(label1a, new GridBagConstraints(0, currentRow, 1, 1, 0.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); progressPanel.add(label1b, new GridBagConstraints(1, currentRow, 1, 1, 0.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); currentRow++; } // set main message height... StringTokenizer st = new StringTokenizer(mainMessage,"\n"); controlMainMessage.setRows(st.countTokens()+1); controlMainMessage.setText(ClientSettings.getInstance().getResources().getResource(mainMessage)); // set progress bar bounds... setMinimumValue(minValue); setMaximumValue(maxValue); // show/hide the cancel button... if (showCancelButton) progressPanel.add(buttonCancel, new GridBagConstraints(1, currentRow+3, 1, 1, 0.0, 1.0 ,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); else progressPanel.add(new JLabel(""), new GridBagConstraints(1, currentRow+3, 1, 1, 0.0, 1.0 ,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); progressBar.setForeground(ClientSettings.GRID_SELECTION_BACKGROUND); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.setLayout(borderLayout1); progressPanel.setBorder(BorderFactory.createEtchedBorder()); progressPanel.setLayout(gridBagLayout2); titlePanel.setLayout(gridBagLayout1); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); scrollPane.setBorder(BorderFactory.createEmptyBorder()); // controlMainMessage.setBackground(SystemColor.scrollbar); controlMainMessage.setDoubleBuffered(false); controlMainMessage.setEditable(false); controlMainMessage.setText(""); labelMainTitle.setFont(new java.awt.Font(labelMainTitle.getFont().getName(), Font.BOLD, labelMainTitle.getFont().getSize()+1)); labelProgress.setText(ClientSettings.getInstance().getResources().getResource("progress")+":"); buttonCancel.setText(ClientSettings.getInstance().getResources().getResource("cancel")); this.add(titlePanel, BorderLayout.NORTH); this.add(progressPanel, BorderLayout.CENTER); titlePanel.add(labelMainTitle, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); titlePanel.add(scrollPane, new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0 ,GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 25, 5, 5), 0, 0)); scrollPane.getViewport().add(controlMainMessage, null); progressPanel.add(labelProgress, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); progressPanel.add(progressBar, new GridBagConstraints(1, currentRow+2, 1, 1, 1.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0)); } /** * Notify an event that will update the progress bar and the other window content. * @param event progress event */ public final void processProgressEvent(ProgressEvent event) { labelMainTitle.setText(ClientSettings.getInstance().getResources().getResource(event.getMainTitle())); controlMainMessage.setText(ClientSettings.getInstance().getResources().getResource(event.getMainMessage())); for(int i=0;i<event.getText().length;i++) ((JLabel)messages.get(i)).setText(ClientSettings.getInstance().getResources().getResource(event.getText()[i])); progressBar.setValue((int)event.getProgressValue()); } /** * Add an action listener to the cancel button. * @param listener listener to add */ public final void addCancelButtonListener(ActionListener listener) { buttonCancel.addActionListener(listener); } /** * Remove the specified action listener to the cancel button. * @param listener listener to remove */ public final void removeCancelButtonListener(ActionListener listener) { buttonCancel.removeActionListener(listener); } /** * Set the minimum value allowed in the progress bar. * @param minValue minimum value allowed in the progress bar */ public final void setMinimumValue(double minValue) { progressBar.setMinValue(minValue); } /** * Set the maximum value allowed in the progress bar. * @param maxValue maximum value allowed in the progress bar */ public final void setMaximumValue(double maxValue) { progressBar.setMaxValue(maxValue); } /** * @return inimum value allowed in the progress bar */ public final double getMinimumValue() { return progressBar.getMinValue(); } /** * @return maximum value allowed in the progress bar */ public final double getMaximumValue() { return progressBar.getMaxValue(); } /** * Set the progress bar color. * @param color progress bar color */ public final void setProgressBarColor(Color color) { progressBar.setBackground(color); } /** * @return progress bar color */ public final Color getProgressBarColor() { return progressBar.getBackground(); } /** * Set an image panel a the left of the main title. * @param imageName image name that identifies the image to show; the image must be located in "images" sub-folder */ public final void setImageName(String imageName) { if (imagePanel==null) { imagePanel = new ImagePanel(); imagePanel.setScrollBarsPolicy(ImagePanel.SCROLLBAR_NEVER); titlePanel.add(imagePanel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0 ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); } imagePanel.setImageName(imageName); } /** * @return imageName image name that identifies the image to show; the image must be located in "images" sub-folder */ public final String getImageName() { return imagePanel==null?null:imagePanel.getImageName(); } /** * Add an interval [minValue,maxValue] and a color to use to paint that interval. * @param minValue minimum value of this interval * @param maxValue maximum value of this interval * @param color color to use to paint this band * @return <code>true</code> if the specified interval does not match any other interval, <code>false</code> otherwise */ public final boolean addColoredBand(double minValue,double maxValue,Color color) { return progressBar.addColoredBand(minValue,maxValue,color); } /** * @return flag used to determine how color the progress bar: <code>true</code> to paint the bar with many colors, each band with its color, <code>false</code> to paint the bar with ony one color: the color related to the last matched band */ public final boolean isShowAllBands() { return progressBar.isShowAllBands(); } /** * Determine how color the progress bar: <code>true</code> to paint the bar with many colors, each band with its color, <code>false</code> to paint the bar with ony one color: the color related to the last matched band. * @param showAllBands flag used to determine how color the progress bar: <code>true</code> to paint the bar with many colors, each band with its color, <code>false</code> to paint the bar with ony one color: the color related to the last matched band */ public final void setShowAllBands(boolean showAllBands) { progressBar.setShowAllBands(showAllBands); } }