Taskleiste

illaX

Erfahrenes Mitglied
Hi,

ich moechte wenn die Applikation nicht den Fokus hat und ein Event auftritt, dass das Programm in der Taskleiste "blinkt". Ist dies in java moeglich oder kann ich nur das Icon setzen?

Danke
 
Hallo!

Schau mal hier:
Code:
/**
 * 
 */
package de.tutorials;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.Timer;

/**
 * @author Tom
 * 
 */
public class TaskBarNotificationExample extends JFrame {

    public TaskBarNotificationExample() {
        super("TaskBarNotificationExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(320, 240);
        setVisible(true);
        Timer timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                if (hasFocus()) {
                    System.out.println("has focus");
                } else {
                    System.out.println("blink");
                    setVisible(true);
                }
            }
        });
        timer.setRepeats(true);
        timer.start();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        new TaskBarNotificationExample();
    }
}

Gruss Tom
 
Danke Thomas,

zur Verstaendniss: Das Fenster blinkt, wegen der Anweisung setVisible(true). Jetzt habe ich (fast) den selben code bei mir eingebaut.
Nur wenn ich das Fenster wechsel springt er automatisch wieder zu dem das blinkt. Bei dir war dies nicht der Fall, warum?
 
Ok ist klar warum er das macht, gibt es noch eine andere Moeglichkeit als setVisible(true)?
 
Dies hier ist meine Klasse die fuer das "blinken" verantwortlich ist.

Gestartet wird er in einer anderen Methode wenn das Frame keinen Fokus hat.

Code:
public class Blink extends Thread {

    private JFrame frame = null;
    
    public Blink(JFrame frame) {
        super();
        this.frame = frame;
    }

    public void run() {
        super.run();
        while(true) {
            try {
                if(isInterrupted())
                    break;
                
                if(!frame.hasFocus()) {
                    frame.setVisible(true);
                    System.out.println("blink");
                } else
                    break;
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                break;
            }
        }
        System.out.println("Blink beendet");
    }
}

Dann fuege ich meinen frame nen WindowListener hinzu, wo bei den aktionen aktivieren und schliessen der Thread interrupted wird. Er wird auch einwandfrei beendet. Wenn ich nun das aktive Fenster verlasse springt er sofort wieder zurueck, das macht er nur beim ersten verlassen, danach funktioniert wieder alles einwandfrei.

Ich versteh das nicht. Warum tut er das? Er fuehrt keine Anweisungen aus, bei dem WindowListener habe ich die Methoden Deactivated und Inconified leer gelassen.
 
Ok das Problem ist geloest. Habe ueberprueft, ob das Frame den Focus hat, wenn ja dann starte das "blinken". War natuerlich falsch, der Focus war immer aufm Textfeld...
 
Zurück