/* * jMemorize - Learning made easy (and fun) - A Leitner flashcards tool * Copyright(C) 2004-2008 Riad Djemili and contributors * * This program 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 1, 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package jmemorize.gui.swing.widgets; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Insets; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JProgressBar; /** * @author rd * */ public class PartialProgressBar extends JProgressBar { private float[] m_values; public PartialProgressBar() { setBorder(null); } public void setValues(float[] values) { m_values = values; repaint(); } public void setOrientation(int newOrientation) { if (getOrientation() != HORIZONTAL) throw new UnsupportedOperationException(); } protected void paintComponent(Graphics g) { super.paintComponent(g); Insets insets = getInsets(); int barHeight = getHeight() - (insets.top + insets.bottom); int barWidth = getWidth() - (insets.left + insets.right); int x = getX() + insets.left; int y = getY() + insets.top; int w = barWidth / m_values.length; int remaining = barWidth - (m_values.length * w); Color color = getForeground(); for (int i = 0; i < m_values.length; i++) { Color c = new Color(color.getRed(), color.getGreen(), color.getBlue(), (int)(m_values[i] * 255)); g.setColor(c); // we distribute the remaing pixels among the first columns int tw = (remaining--) > 0 ? w + 1 : w; g.fillRect(x, y, tw, barHeight); x += tw; } // if (isStringPainted()) // { // FontMetrics metrics = getFontMetrics(getFont()); // int strWidth = metrics.stringWidth(getString()); // int strHeight = metrics.getAscent() - metrics.getDescent() - metrics.getLeading(); // // int fx = getX() + insets.left + barWidth/2 - strWidth/2; // int fy = getY() + insets.top + ((barHeight+strHeight)/2); // // g.setColor(Color.WHITE); // g.drawString(getString(), fx, fy); // } } public static void main(String[] args) { PartialProgressBar bar = new PartialProgressBar(); bar.setString("Hello World"); Random rand = new Random(); float[] vals = new float[100]; for (int i = 0; i < vals.length; i++) { vals[i] = rand.nextFloat(); } bar.setValues(vals); bar.setForeground(Color.BLUE); bar.setStringPainted(true); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(bar); JFrame frame = new JFrame(); frame.getContentPane().add(panel); frame.setSize(500, 100); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }