/* * This file is part of WebLookAndFeel library. * * WebLookAndFeel library is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * WebLookAndFeel 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WebLookAndFeel library. If not, see . */ package com.alee.examples.groups.progress; import com.alee.examples.WebLookAndFeelDemo; import com.alee.examples.content.DefaultExample; import com.alee.examples.content.ExamplesManager; import com.alee.extended.panel.GroupPanel; import com.alee.extended.progress.WebProgressOverlay; import com.alee.laf.label.WebLabel; import com.alee.laf.panel.WebPanel; import com.alee.laf.scroll.WebScrollPane; import com.alee.laf.text.WebTextArea; import com.alee.utils.SwingUtils; import com.alee.utils.ThreadUtils; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** * User: mgarin Date: 07.11.12 Time: 18:07 */ public class TextProgressOverlayExample extends DefaultExample { @Override public String getTitle () { return "Text progress"; } @Override public String getDescription () { return "Web-styled text progress overlay"; } @Override public Component getPreview ( WebLookAndFeelDemo owner ) { // Overlay panel final WebProgressOverlay progressOverlay = new WebProgressOverlay (); progressOverlay.setProgressWidth ( 35 ); // Overlay content final WebTextArea textArea = new WebTextArea (); textArea.setText ( "Click to load some text..." ); textArea.setLineWrap ( true ); textArea.setWrapStyleWord ( true ); WebScrollPane scrollPane = new WebScrollPane ( textArea ); scrollPane.setPreferredSize ( new Dimension ( 250, 100 ) ); progressOverlay.setComponent ( scrollPane ); // Overlaying components final WebLabel progressLabel = new WebLabel ( "0%", WebLabel.CENTER ); progressLabel.setBoldFont (); progressLabel.setMargin ( 5, 10, 5, 10 ); final WebPanel overlayPanel = new WebPanel ( true, progressLabel ); overlayPanel.setShadeWidth ( 5 ); overlayPanel.setVisible ( false ); overlayPanel.setPreferredSize ( new Dimension ( 60, 40 ) ); progressOverlay.addOverlay ( overlayPanel, SwingConstants.CENTER, SwingConstants.CENTER ); // Animation start action textArea.addMouseListener ( new MouseAdapter () { private String base = ExamplesManager.createSmallString (); private String toAdd = ""; private int step = 5; @Override public void mousePressed ( MouseEvent e ) { // Updating string to write if ( toAdd.length () == 0 ) { textArea.clear (); toAdd = base; } progressOverlay.setShowLoad ( true ); overlayPanel.setVisible ( true ); new Thread ( new Runnable () { @Override public void run () { while ( toAdd.length () > 0 ) { final int left = Math.min ( step, toAdd.length () ); SwingUtils.invokeAndWaitSafely ( new Runnable () { @Override public void run () { textArea.append ( toAdd.substring ( 0, left ) ); progressLabel.setText ( ( base.length () - toAdd.length () ) * 100 / base.length () + " %" ); } } ); toAdd = toAdd.substring ( left ); ThreadUtils.sleepSafely ( 50 ); } SwingUtilities.invokeLater ( new Runnable () { @Override public void run () { progressOverlay.setShowLoad ( false ); overlayPanel.setVisible ( false ); } } ); } } ).start (); } } ); return new GroupPanel ( progressOverlay ); } }