2010-07-13 16 views
17

जावा और स्विंग का उपयोग करना, क्या कोई सूचना बनाने के लिए कोई सुविधाजनक (सुविधाजनक) तरीका है? अधिसूचना, मैं की तरह कुछ मतलब है:स्विंग में अधिसूचना कैसे बनाएं

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

(वहाँ उस के लिए एक अधिक सही शब्द है?)। यह अच्छा होगा अगर यह क्रॉस प्लेटफॉर्म पर काम करता है, लेकिन मैं मुख्य रूप से उबंटू के तहत जीनोम के साथ काम कर रहा हूं। यदि संभव हो, तो मैं सिस्टम ट्रे/अधिसूचना क्षेत्र में आइकन रखने से बचना चाहता हूं।

तो बाकी सब विफल रहता है, मैं हमेशा फिसलने अधिसूचना से Sliding Notification bar in java (a la Firefox)

+0

लिबडक्स का उपयोग करके ऐसा कैसे करें? –

उत्तर

26

आपको सजावट के बिना translucent frame की आवश्यकता हो सकती है।

त्वरित डेमो

OSX

enter image description here]

आप लाभ ले सकते हैं JLabel साधारण HTML

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

यह अब तक की सबसे अच्छी लग रही चीज़ है, इसलिए मैं ' इसके साथ जाना होगा (-: यह बहुत बुरा है कि (जहां तक ​​मुझे पता है) स्विंग से मूल सूचनाओं का उपयोग करने का एक तरीका नहीं है। – Jeremy

+3

जावा अब इसे मूल रूप से समर्थन देता है। http://docs.oracle.com/ जावा/ट्यूटोरियल/uiswing/Misc/trans_shaped_windows.html – kazanaki

+0

ग्रेट उत्तर। सबसे महत्वपूर्ण बात यह है कि यह प्रत्येक प्लेटफ़ॉर्म पर काम करता है। – kazy

14

एक मानक तरीका यह Swing TrayIcon API उपयोग करने के लिए है करने के लिए इस्तेमाल कर सकते हैं। यह शायद सबसे सुविधाजनक तरीका भी होगा :)

+1

अनुमान पर, डिस्प्ले मैसेज तीसरे स्क्रीनशॉट में दिखाए गए शैली को उत्पन्न करेगा। विंडोज़ पर, किसी भी दर पर। – Powerlord

+0

मेरे सिस्टम पर, यह इस तरह दिख रहा है: http://i.imgur.com/tfTkv.png (मैं देशी gnome अधिसूचना के करीब कुछ की उम्मीद कर रहा था) – Jeremy

+1

कस्टम अधिसूचना विंडो बनाना संभव है, लेकिन यह कम "सुविधाजनक" होगा। असल में इसमें फोकस लिस्टनर के साथ एक विंडो बनाना शामिल है जैसे कि खिड़की फोकस होने पर बंद हो जाती है। जाहिर है आप अपने पैंटिंग करने में सक्षम होंगे। एनीमेशन प्रभावों के लिए मैं सुझाव देता हूं कि http://kenai.com/projects/trident/pages/Home –

4

मैंने इसका उपयोग नहीं किया है, लेकिन JToaster ऐसा लगता है कि यह एक अच्छा मैच हो सकता है। इसके अलावा, क्या आप एसडब्ल्यूटी का उपयोग करने के लिए खुले हैं? यह आपको कुछ अतिरिक्त विकल्प दे सकता है (here's an example)।

+0

अच्छा बिंदु पर पाए गए ट्राइडेंट लाइब्रेरी। मुझे शायद स्विंग का उपयोग करना बंद कर देना चाहिए। – Jeremy

+0

@ जेरेमी, आपको शायद स्विंग के साथ और अधिक काम करने की ज़रूरत है, यह बहुत शक्तिशाली है (जब आप इसे जानते हैं, जो बीटीडब्ल्यू में कुछ समय लग सकता है) – OscarRyz

1

मैं अत्यधिक निम्नलिखित पुस्तकालय की सिफारिश को प्रदर्शित करता है, यह सामान्य JFrame अधिसूचना जो देता है अंदर प्रदान करता है पूर्ण नियंत्रण ।

http://jcarrierpigeon.sourceforge.net/

संबंधित मुद्दे