JDialog mit count down timer

Eichelhäer

Bekanntes Mitglied
Hallo,

ich versuche gerade Fehlermeldungen meines Clients am Bildschirm mit einem JDialog auszugeben. Dabei soll einfach eine JOptionPane.WARNING_MESSAGE (icon erstmal egal ebenso wie look and feel) sowie ein custom button angezeigt werden in dem ein Time 3 sekunden runterzählt. (Siehe LoL fehlermeldung wenn die server nich erreichbar sind o.Ä.)

Hier mal mein bisheriger Code:

Java:
JOptionPane optionPane = new JOptionPane(message,JOptionPane.WARNING_MESSAGE,JOptionPane.OK_OPTION);

        JButton button = new JButton("Client beenden");
        button.setEnabled(false);
        button.addActionListener(e -> {
            System.exit(0);
        });
        optionPane.add(button,BorderLayout.PAGE_END);

        JDialog dialog = new JDialog();
        dialog.setUndecorated(true);
        dialog.setContentPane(optionPane);
        dialog.pack();
        dialog.setLocationRelativeTo(null);
        dialog.setVisible(true);

        final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        final Runnable runnable = new Runnable() {
            int counter = 4;

            public void run() {

                counter--;

                button.setText("Client beenden ("+counter+")");

                if (counter < 1) {
                    button.setEnabled(true);
                    scheduler.shutdown();
                }
            }
        };
        scheduler.scheduleAtFixedRate(runnable, 0, 1, SECONDS);

Das Problem ist, das ich keinen Zugriff auf die Buttons des Dialogs bekomme und somit die buttons nicht textlich ändern kann. Allerding habe ich auf dem Oracle Java tutorial nachgeschaut, wo eben das erklärt wird, allerdings komme ich da dann nur soweit, dass ich das gewünschte dialogfenster anzeigen kann aber den Text (siehe counter im Scheduler oben im Code nicht anzeigen kann. Hier nochmal das von Oracle:

Code:
Object[] options = {"Client beenden"};

        int n = JOptionPane.showOptionDialog(this,message,"Serverstatusmeldung",JOptionPane.OK_OPTION,JOptionPane.WARNING_MESSAGE,null,options,options[0]);

        JOptionPane optionPane = new JOptionPane(message,JOptionPane.WARNING_MESSAGE,n);

Vielleicht weiss jemand Rat.

Grüße

Eichelhäer
 
Ich habe wohl zu früh gepostet. Hier die Lösung habs gerade selbst rausgefunden, wenn das jmd interessiert:

Java:
JButton[] options = new JButton[1];
        options[0] = new JButton("Client beenden (3)");
        options[0].setEnabled(false);

        JOptionPane optionPane = new JOptionPane(message,JOptionPane.WARNING_MESSAGE,JOptionPane.OK_OPTION,null,options,options[0]);

        JDialog dialog = new JDialog();
        dialog.setUndecorated(true);
        dialog.setContentPane(optionPane);
        dialog.pack();
        dialog.setLocationRelativeTo(null);
        dialog.setVisible(true);

        final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        final Runnable runnable = new Runnable() {

            int counter = 3;

            public void run() {

                options[0].setText("Client beenden ("+counter+")");

                counter--;

                if (counter < 0) {
                    options[0].setEnabled(true);
                    scheduler.shutdown();
                }
            }
        };
        scheduler.scheduleAtFixedRate(runnable, 0, 1, SECONDS);

Die Lösung war einfach direkt einen JButton als Option (Parameter des Konstruktors) für die JOption Pane zu nehmen. Das funktioniert wuderbar.
 

Zurück
Oben