2014-07-18 12 views
7

Mi chiedevo se Java o JFrame possono avvisare l'utente quando qualcosa è accaduto nel programma. Ad esempio, quando in Skype ricevi un nuovo messaggio, lo sfondo delle icone di Skype diventa giallo. "You have received a new message!"Come rendere avviso JFrame nella barra delle applicazioni?

Posso farlo in Java?

+0

cosa intendi per qualcosa che è successo nel programma. – Braj

+0

Quando un determinato metodo ha finito di funzionare o quando un'istruzione IF restituisce true. –

+1

possibile duplicato di [Come creare una notifica in swing] (http://stackoverflow.com/questions/3240415/how-to-create-a-notification-in-swing) – Frakcool

risposta

5

Almeno puoi cambiare l'icona di JFrame chiamando il metodo JFrame#setIconImage() che assomiglia ad una notifica e cambia anche il titolo se necessario.

Crea un'icona che vuoi mostrare quando c'è qualche notifica e imposta l'icona dal codice dove vuoi.


Per creare un effetto luminoso (lampeggio) si possono usare due immagini e scambiare ad un intervallo se finestra in forma minimizzata utilizzando Swing Timer e fermare il timer quando la finestra viene nuovamente deiconified.

Leggi tutto How to Use Swing Timers

codice di esempio:

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

Nevermind, non l'ho letto bene. – user3758041

+1

anche lui potrebbe usare un Timer per far sì che sia come dire "luce accesa e luce spenta"? Non so come spiegarlo ... Intendo renderlo "glow" – Frakcool

+1

@Frakcool sì, ho anche modificato il post nel post. – Braj

0

Quando si chiama il toFront() o il requestFocus() Funzione finestra lampeggia come si desidera.

L'unico problema è che si concentrerà, ma fino a quando non ne hai bisogno non è un problema. (La finestra non si mette di fronte solo una richiesta)