package com.qksnap.www.snap.gui.tabpane.componet; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Image; import java.awt.Insets; import java.awt.RenderingHints; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JProgressBar; import javax.swing.UIManager; import javax.swing.plaf.basic.BasicProgressBarUI; /** * * Custom Progress Bar that uses an image as the background * @author Patrick "zeroeh" * */ public class ProgressBar extends BasicProgressBarUI { @Override public void paint(Graphics g, JComponent c) { Graphics2D g2 = (Graphics2D) g; // for antialiasing geometric shapes g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // for antialiasing text g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); // to go for quality over speed g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); super.paint(g, c); } protected void paintDeterminate(Graphics g, JComponent c) { if (progressBar.getOrientation() == JProgressBar.VERTICAL) { super.paintDeterminate(g, c); return; } Insets b = progressBar.getInsets(); // area for border int width = progressBar.getWidth(); int height = progressBar.getHeight(); int barRectWidth = width - (b.right + b.left); int barRectHeight = height - (b.top + b.bottom); // amount of progress to draw int amountFull = getAmountFull(b, barRectWidth, barRectHeight); Graphics2D g2 = (Graphics2D) g; g2.setColor(progressBar.getBackground()); g2.fillRect(0, 0, width - 1, height - 1); g2.setColor(Color.white); try { g2.drawImage(ImageIO.read(getClass().getResource("/progressbar.png")), b.left, b.top, amountFull - 1, barRectHeight - 1,null); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (progressBar.isStringPainted()) { paintString(g, b.left, b.top, barRectWidth, barRectHeight, amountFull, b); } } @Override public Dimension getPreferredSize(JComponent c) { Dimension dim = super.getPreferredSize(c); if (progressBar.getOrientation() == JProgressBar.HORIZONTAL) { if (dim.width < dim.height * 4) dim.width = dim.height * 4; } return dim; } }