2010-07-13 12 views
17

Java ve Swing'i kullanarak, bir bildirim oluşturmak için herhangi bir (uygun) yol var mı?Salıncakta bildirim oluşturma

this http://productivelinux.com/images/notify-osd-screenshot.png, this http://images.maketecheasier.com/2010/01/kfirefox-notify-indexed.png, veya this

(bunun için daha doğru bir terim var mı?): Bildirim By , şöyle bir şey yani. Çapraz platform çalışsaydı güzel olurdu, ama esasen Gnome ile Ubuntu altında çalışmakla ilgileniyorum. Mümkünse, sistem tepsisinde/bildirim alanında bir simge bulundurmaktan kaçınmak istiyorum.

Bütün bunlardan sonuç alamazsanız

, ben her zaman Swing TrayIcon API kullanmaktır yapmak Sliding Notification bar in java (a la Firefox)

+0

Nasıl Libgdx kullanarak nasıl yapılır? –

cevap

26

Süslemeler olmadan translucent frame ürününe ihtiyaç duyabilirsiniz.

Hızlı demo

OSX

enter image description here]

Sen JLabel ederim şu kitaplığı tavsiye

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.text.*; 
import java.util.Date; 
import java.lang.reflect.Method; 
import java.lang.reflect.InvocationTargetException; 


/** 
* Simple demo on how a translucent window 
* looks like when is used to display the system clock. 
* @author <a href="http://stackoverflow.com/users/20654/oscarryz">Oscar Reyes</a> 
*/ 
class Translucent extends JPanel implements ActionListener { 

    private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); 
    private final Date now = new Date(); 
    private final Timer timer = new Timer(1000, this); 
    private final JLabel text = new JLabel(); 

    public Translucent() { 
     super(true); 
     timer.start(); 
    } 


    @Override 
    public void actionPerformed(ActionEvent e) { 
     now.setTime(System.currentTimeMillis()); 
     text.setText(String.format("<html><body><font size='50'>%s</font></body></html>",sdf.format(now))); 
    } 

    public static void main(String[] args) { 

     JFrame f = new JFrame(); 
     f.setUndecorated(true); 
     setTranslucency(f); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setBackground(new Color(0f, 0f, 0f, 1f/3f)); 
     JPanel p = new Translucent(); 
     JLabel l = new JLabel("Hola"); 
     l.setFont(new Font(l.getFont().getName(), Font.PLAIN, 128)); 
     p.add(l); 
     f.add(p); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 
    // taken from: http://java.sun.com/developer/technicalArticles/GUI/translucent_shaped_windows/ 
    private static void setTranslucency(Window window){ 
     try { 
       Class<?> awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities"); 
       Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class); 
       if (!mSetWindowOpacity.isAccessible()) { 
        mSetWindowOpacity.setAccessible(true); 
       } 
       mSetWindowOpacity.invoke(null, window, Float.valueOf(0.75f)); 
      } catch (NoSuchMethodException ex) { 
       ex.printStackTrace(); 
      } catch (SecurityException ex) { 
       ex.printStackTrace(); 
      } catch (ClassNotFoundException ex) { 
       ex.printStackTrace(); 
      } catch (IllegalAccessException ex) { 
       ex.printStackTrace(); 
      } catch (IllegalArgumentException ex) { 
       ex.printStackTrace(); 
      } catch (InvocationTargetException ex) { 
       ex.printStackTrace(); 
      } 
    } 
} 
+0

Şimdiye kadar gördüğüm en güzel görünen şey, bu yüzden ' onunla gideceğim (-: Yerel bildirimleri salıncaktan kullanmanın bir yolu olmadığı (bildiğim kadarıyla) çok kötü. – Jeremy

+3

Java şimdi bunu destekliyor. http://docs.oracle.com/ javase/öğretici/uiswing/misc/trans_shaped_windows.html – kazanaki

+0

Harika bir yanıt daha var, ama her şeye dayanmaktadır: – kazy

14

standart bir yolu dan kayar bildirim kullanabilirsiniz. Bu da muhtemelen en uygun yol olacaktı :)

+1

Bir tahminde, displayMessage, üçüncü ekran görüntüsünde gösterilen stili üretecektir. Windows'da, herhangi bir oranda. – Powerlord

+0

Sistemimde, şu şekilde görünüyor: http://i.imgur.com/tfTkv.png (Yerel gnome bildirimine daha yakın bir şey umuyordum) – Jeremy

+1

Özel bildirim penceresi oluşturmak mümkündür, ancak daha az "uygun" olurdu. Temel olarak, odağı kaybettiğinde pencere kapanacak şekilde FocusListener ile bir pencere oluşturulmasını içerir. Açıkça, kendi nefesini yapabileceksin. Animasyon efektleri için http://kenai.com/projects/trident/pages/Home adresinde bulunan Trident kütüphanesini öneririm. –

4

Bunu kullanmadım ama JToaster iyi bir eşleşme gibi görünüyor. Ayrıca, SWT'yi kullanmaya açık mısınız? Bu size bazı ek seçenekler sunabilir (here's an example).

+0

İyi nokta. Muhtemelen Swing'i kullanmayı bırakmalıyım. – Jeremy

+0

@Jeremy, muhtemelen sadece salıncakla daha çok çalışmaya ihtiyaç duyuyorsunuz, çok güçlü (onu tanımak istediğinizde, hangi btw, bir süre alabilir) – OscarRyz