Auf Thema antworten

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]



Oben