Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

ProgressBar

Empfohlene Antworten

Hallo! Ich möchte eine ProgressBar programmieren, die den Status versendeter Dateien anzeigt. Den Frame mit einem Label "Gesendet: " und einem Button "Abbrechen" habe ich. Eigentlich habe ich auch schon die ProgressBar, aber wenn ich das Programm starte öffnet sich die Bar in einem zweiten Frame. Wenn ich alles in ein Frame packe, sieht man erst nichts, ausser dem DOS-Fenster. Erst wenn es abgearbeitet ist erscheind es, und zeigt an wieviel Dateien versendet wurden. Im Quellcode ist noch nichts mit eingebunden, es geht erst mal darum dass die Bar läuft. Und was muss ich machen, dass das ganze im Hintergrund läuft, d.h. rechts unten in der Taskleiste?

PS: ich weiss der Code ist ziemlich durcheinander, kommt vom vielen rumprobieren. :)


// Datei Balken.java


import java.awt.*;

import java.awt.event.*;


import javax.swing.*;


public class Balken {


    public static void main(String[] args) {

        new UserFrame();

    }

}


class UserFrame extends JFrame implements ActionListener {


    int datnr;

    private JProgressBar bar;

    private JLabel status;


    private void place(Component comp, int x, int y, int width, int height) {

        comp.setBounds(x, y, width, height);

        add(comp);

    }


    public UserFrame() {

        getContentPane().setLayout(new FlowLayout());

        // Titel festlegen

        setTitle("Sende Dateien");

        // Groesse festlegen

        setSize(300, 100);

        //setLayout(null);

        // Hintergrundfarbe

        setBackground(Color.lightGray);


        final int max = 5;

        final JProgressBar bar = new JProgressBar(0, max);


        do {

            // Anzeige in Veränderung

            for (int i = 1; i <= max; i++) {

                try {

                    Thread.sleep(10);

                } catch (InterruptedException e) {

                }

                final int j = i;

                SwingUtilities.invokeLater(new Runnable() {


                    public void run() {

                        bar.setValue(j);

                    }

                });

            }

            datnr++;

        } while (datnr < 50);


        status = new JLabel("Gesendet: " + datnr);

        status.setFont(new Font("Arial", Font.BOLD, 12));

        status.setBackground(Color.lightGray);

        getContentPane().add(status);


        getContentPane().add(bar);


        //JFrame frame = new JFrame();

        //frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );


        //frame.pack();

        //frame.show();


        JButton btn = new JButton("Abbrechen");

        btn.setFont(new Font("Arial", Font.BOLD, 11));

        btn.setBackground(new Color(200, 200, 200));

        btn.addActionListener(this);

        getContentPane().add(btn);


        // sichtbar

        setVisible(true);


        addWindowListener(new WindowAdapter() {


            public void windowClosing(WindowEvent e) {

                System.exit(0);

            }

        });


    }


    public void actionPerformed(ActionEvent e) {

        String cmd = e.getActionCommand();

        if (cmd.equals("Abbrechen"))

            System.exit(0);

    }


}

Edit: Bitte code tags benutzen! ;)

Schon mal dran gedacht, das dein


     do {

            //         Anzeige in Veränderung

            for (int i = 1; i <= max; i++) {

                try {

                    Thread.sleep(10);

                } catch (InterruptedException e) {

                }

                final int j = i;

                SwingUtilities.invokeLater(new Runnable() {


                    public void run() {

                        bar.setValue(j);

                    }

                });

            }

            datnr++;

        } while (datnr < 50);

DIREKT bei der Erzeugung deines Frames abgearbeitet wird?!

Jetzt überlege mal, ob das nicht vielleicht dein Fehler ist... ;-)

@Enrico T.:

1. Wenn ich start() mit anhänge, muss ich doch eine Methode schreiben, die so heisst oder? Wenn ja, wie?

2. Und wenn ich Runnable anhänge kommt

F:\Balken\Balken.java:19: UserFrame should be declared abstract; it does not define run() in UserFrame

class UserFrame extends JFrame implements ActionListener, Runnable

@Peeter:

Ich hab die Schleife soweit oben geschrieben, weil sonst das Label "status" den Wert von der Variable datnr nicht übernimmt. Wenn es weiter unten steht, kommt nach der Ausführung immer "Gesendet: 0" obwohl es eben 50 sein müssten. Oder muss ich das Ganze als Funktion schreiben? Wenn ja wie?

Vorneweg mal was. Beschäftige dich mal mit Threads und Interfaces... Nur ein gut gemeinter Rat. Wenn du Runnable implementierst MUSST du abstracte Methoden überschreiben.

So, und nun zu deiner do-while-Schleife.

Schreib das ganze als Methode und rufe das ganze in einem extra-Thread auf... ;)

@Enrico T.:

1. Wenn ich start() mit anhänge, muss ich doch eine Methode schreiben, die so heisst oder? Wenn ja, wie?

Nein.

@Enrico T.:

2. Und wenn ich Runnable anhänge kommt

F:\Balken\Balken.java:19: UserFrame should be declared abstract; it does not define run() in UserFrame

class UserFrame extends JFrame implements ActionListener, Runnable

Du must die Methode public void run() überschreiben.

Da packst du dann deine Schleife rein.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.