Timer in JOptionPane anzeigen

Diskutiere Timer in JOptionPane anzeigen im AWT, Swing, JavaFX & SWT Bereich.
O

OSbOoL

Hi,
ich möchte gerne einen Timer in meinem JOptionPane anzeigen. Es soll eine Zeit ablaufen, die ich vorher definiert habe(beispielsweise 30 Sekunden). Gleichzeitig soll nach dem Ablauf der Zeit das JOptionPane geschlossen werden und eine Methode ausgeführt werden.
Ich habe die GUI sowie den Timer programmiert, jedoch weiß ich nicht wie ich den Code funktionell zusammenführen soll.
Hier der Code der (abgespeckten) GUI:

Java:
public class MainGUI extends JFrame {

    /**
     *
     */
    private static final long serialVersionUID = 1604723320962789523L;
    private JPanel contentPane;

    class MeinListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getActionCommand().equals("Relais an")) {

                System.out.println("Test");
                pumpRun();

            }
        }

    }

    public static void main(String[] args) {
        new MainGUI();
    }

   
    public MainGUI() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 919, 807);
        contentPane = new JPanel();
        contentPane.setBackground(UIManager.getColor("Button.shadow"));
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);

        contentPane.setLayout(null);

        setSize(992, 797);
        setVisible(true);

        JButton btnRelais = new JButton("Relais an");
        btnRelais.setBounds(250, 25, 195, 129);

        MeinListener listener = new MeinListener();
        btnRelais.addActionListener(listener);
        contentPane.add(btnRelais);
    }

    private void pumpRun() {
        Icon imgIcon = new ImageIcon(this.getClass().getResource("Schlauchpumpe.gif"));
        JTextField name = new JTextField();
        JTextField vorname = new JTextField();
                Object[] message = {"Die Pumpen sind in Betrieb!",
                "Zum Abbrechen bitte OK klicken!", imgIcon};

                JOptionPane pane = new JOptionPane( message,
                                                JOptionPane.PLAIN_MESSAGE,
                                                JOptionPane.CLOSED_OPTION
                                               );
                pane.createDialog(null, "Mittel wird gepumpt!").setVisible(true);

                System.out.println("Eingabe: " + name.getText() + ", " + vorname.getText());
       

    }
}
Den Timer habe ich zum Ausprobieren in einer anderen Klasse erstellt.
Hier der Code:
Java:
import java.util.Timer;
import java.util.TimerTask;

public class Countdown {
    int timer;
    public static void main(String[] args) {
       
        int zaehler = 10;
       
        Countdown countdown = new Countdown();
       
        countdown.counter(zaehler);

    }  
    public void counter(int zaehler) {
        timer = zaehler;
       
        Timer timerA = new Timer();
       
        TimerTask taskA = new TimerTask() {
           
            @Override
            public void run() {
                if (timer >= 0) {
                    System.out.println(timer);
                    timer--;
                }
                if (timer == -1) {
                    System.out.println("Ende");
                    timerA.cancel();
                }
            }
        };
        timerA.schedule(taskA, 0, 1000);
    }
}
Das funktioniert soweit alles, nur habe ich, wie gesagt, Probleme damit die beiden Sachen zu vereinen.
Ich weiß auch nicht ob es die beste Lösung ist, da ein JOptionPane zu verwenden, oder ob der Timer zu kompliziert programmiert ist.

Über Ratschläge bin ich dankbar. :)

LG
 
MoxxiManagarm

MoxxiManagarm

Ich finde JOptionPane nicht geeignet, schreib dir lieber einen eigenen Dialog. Hier eine quick&dirty Demo

Java:
public class TimerDialogDemo extends JFrame {
    public TimerDialogDemo() {
        setTitle("Timer Dialog Demo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        JButton startTimerDialogButton = new JButton("Start");
        startTimerDialogButton.addActionListener(e -> new TimerDialog(10).setVisible(true));
        add(startTimerDialogButton, BorderLayout.CENTER);

        pack();
    }

    public static void main(String... args) {
        SwingUtilities.invokeLater(() -> new TimerDialogDemo().setVisible(true));
    }
}

class TimerDialog extends JDialog {
    private Timer timer;
    private int loops;
    private JLabel displayLabel;

    public TimerDialog(int loops) {
        this.loops = loops;

        setModal(true);
        setLayout(new BorderLayout());

        displayLabel = new JLabel("Remaining: " + loops);
        add(displayLabel, BorderLayout.CENTER);

        timer = new Timer(1000, e -> { // hier: Swing Timer
            this.loops--;
            displayLabel.setText("Remaining: " + this.loops);

            if (this.loops == 0) {
                timer.stop();
                this.dispose();
            }
        });

        timer.start();

        pack();
    }
}
 
O

OSbOoL

Super, vielen Dank. Ich werde mich die Tage damit beschäftigen und Rückmeldung leisten.
 
Thema: 

Timer in JOptionPane anzeigen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben