du rufst [code]repaint()[/code] auf wenn du das Panel neuzeichnen willst, dann wird automatisch deine paintComponent Methode ausgeführt.
EDIT:
z.b.:
[code=Java]
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class ProgressPanel extends JComponent {
private double progress = 0;
public void setProgress(double progress) {
if (progress < 0.0 || progress > 100.0) {
throw new IllegalArgumentException("progress must be between 0.0 and 100.0");
}
this.progress = progress;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.red);
g2d.fillRect(0, 0, (int)((getWidth() / 100.0) * progress), getHeight());
g2d.setColor(Color.BLACK);
g2d.drawString(progress + "%", (getWidth() / 2) - 20, (getHeight() / 2) + 5);
}
public static void main(String[] args) throws InterruptedException {
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
ProgressPanel panel = new ProgressPanel();
panel.setPreferredSize(new Dimension(300, 50));
frame.add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
double prog = 0;
while (true) {
Thread.sleep(1000);
prog += 5;
panel.setProgress(prog);
}
}
}
[/code]