2014-07-18 15 views
7

Zastanawiam się, czy Java lub JFrame może ostrzec użytkownika, gdy coś się stało w programie. Na przykład, gdy w Skype otrzymasz nową wiadomość, tło ikon Skype zmieni się na żółte. "You have received a new message!"Jak wprowadzić alert JFrame na pasku zadań?

Czy mogę to zrobić w Javie?

+0

co masz na myśli przez coś, co stało się w programie. – Braj

+0

Gdy pewna metoda zakończyła pracę lub gdy wyrażenie JEŻELI zwraca wartość true. –

+1

możliwy duplikat [Jak utworzyć powiadomienie na huśtawce] (http://stackoverflow.com/questions/3240415/how-to-create-a-notification-in-swing) – Frakcool

Odpowiedz

5

Przynajmniej możesz zmienić ikonę JFrame, wywołując metodę JFrame#setIconImage(), która wygląda jak powiadomienie, a także w razie potrzeby zmienić tytuł.

Utwórz ikonę, którą chcesz pokazać, gdy pojawi się powiadomienie, i ustaw ikonę z kodem, gdziekolwiek chcesz.


Aby utworzyć blask (migają) efekt można wykorzystać dwa obrazy i zamieniać w odstępie jeśli okno w postaci zminimalizowanej użyciu Swing Timer i zatrzymać stoper, gdy okno jest znowu deiconified.

Czytaj więcej How to Use Swing Timers

przykładowy kod:

private boolean swap; 
private Timer timer; 

.... 

final Image onImage = new ImageIcon(ImageIO.read(new File("resources/1.png"))).getImage(); 
final Image offImage = new ImageIcon(ImageIO.read(new File("resources/2.png"))).getImage(); 

// interval of 500 milli-seconds 
timer = new Timer(500, new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     if (swap) { 
      setIconImage(onImage); 
     } else { 
      setIconImage(offImage); 
     } 
     swap = !swap; 
    } 
}); 
timer.setRepeats(true); 

// check whether window is in ICONIFIED state or not 
if (getExtendedState() == JFrame.ICONIFIED) { 
    timer.start(); 
} 


addWindowListener(new WindowAdapter() { 

    public void windowDeiconified(WindowEvent e) { 
     // set the icon back to default when window is DEICONIFIED 
     timer.stop(); 
    } 
}); 
+0

Nieważne, nie przeczytałem tego dobrze. – user3758041

+1

również mógł użyć Timera, aby sprawić, że usłyszysz, jak to powiedzieć "zapalić i zapalić"? Nie wiem jak to wytłumaczyć ... Chodzi mi o to, żeby było "jarzyć się". – Frakcool

+1

@Frakcool tak miło, że zredagowałem to również w poście. – Braj

0

Po wywołaniu toFront() lub requestFocus() Funkcja okno będzie migać jak chcesz go.

Jedynym problemem jest to, że nabierze ostrości, ale tak długo, jak tego nie potrzebujesz, nie ma problemu. (Okno nie zostanie wyświetlone na jego prośbę)

Powiązane problemy