Java tutorial
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.Icon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.Timer; public class Main { static JTabbedPane jtp = new JTabbedPane(); public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jtp.setPreferredSize(new Dimension(400, 200)); createTab("Reds", Color.RED); f.add(jtp, BorderLayout.CENTER); f.pack(); f.setVisible(true); } private static void createTab(String name, Color color) { ProgressIcon icon = new ProgressIcon(color); jtp.addTab(name, icon, new ColorPanel(jtp, icon)); } } class ColorPanel extends JPanel implements ActionListener { Random rnd = new Random(); Timer timer = new Timer(1000, this); JLabel label = new JLabel("OK!"); JTabbedPane parent; ProgressIcon icon; int mask; int count; public ColorPanel(JTabbedPane parent, ProgressIcon icon) { super(true); this.parent = parent; this.icon = icon; this.mask = icon.color.getRGB(); this.setBackground(icon.color); label.setForeground(icon.color); this.add(label); timer.start(); } public void actionPerformed(ActionEvent e) { this.setBackground(new Color(rnd.nextInt() & mask)); this.icon.update(count += rnd.nextInt(8)); this.parent.repaint(); } } class ProgressIcon implements Icon { int H = 16; int W = 3 * H; Color color; int w; public ProgressIcon(Color color) { this.color = color; } public void update(int i) { w = i % W; } public void paintIcon(Component c, Graphics g, int x, int y) { g.setColor(color); g.fillRect(x, y, w, H); } public int getIconWidth() { return W; } public int getIconHeight() { return H; } }