2010-07-13 5 views
17

Java 및 스윙을 사용하여 알림을 만드는 편리한 방법이 있습니까?스윙에서 알림을 만드는 방법

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

(즉에 대한보다 정확한 용어가 있습니까?) : 통지함으로써 , 나는 같은 것을 의미한다. 크로스 플랫폼에서 잘 작동한다면 좋겠지 만, 주로 그놈과 함께 우분투에서 작업하는 것에 관심이 있습니다. 가능하다면 시스템 트레이/알림 영역에 아이콘이 나타나지 않도록하고 싶습니다.

다른 모든 실패하면

, 나는 항상 Swing TrayIcon API을 사용하는 것입니다 할 Sliding Notification bar in java (a la Firefox)

+0

어떻게 Libgdx를 사용하여 동일한 작업을 수행 할 수 있습니까? –

답변

26

장식없이 translucent frame이 필요할 수 있습니다.

빠른 데모

OSX는

enter image description here]

당신의 JLabel이 내가보기 엔 다음과 같은 라이브러리를 추천

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/ javase/tutorial/uiswing/misc/trans_shaped_windows.html – kazanaki

+0

가장 중요한 점은 모든 플랫폼에서 작동한다는 것입니다. – kazy

14

표준 방법에서 슬라이딩 알림을 사용할 수 있습니다. 아마도 가장 편리한 방법 일 것입니다.

+1

guess에서 displayMessage는 세 번째 스크린 샷에 표시된 스타일을 생성합니다. 여하튼 Windows에서는. – Powerlord

+0

내 시스템에서는 다음과 같이 보입니다. http://i.imgur.com/tfTkv.png (네이티브 그놈 알림에 더 가깝습니다) – Jeremy

+1

사용자 정의 알림 창을 만들 수는 있지만 덜 편리 할 것이다. 기본적으로 포커스를 잃을 때 창이 닫히도록 FocusListener가있는 창을 만드는 작업이 포함됩니다. 분명히 당신은 자신의 헥헥을 할 수있을 것입니다. 애니메이션 효과를 얻으려면 Trident 라이브러리를 http://kenai.com/projects/trident/pages/Home에서 찾으십시오. –

4

저는 이것을 사용하지 않았지만, JToaster은 좋은 일치 일 것 같습니다. 또한 SWT 사용에 대해 열려 있습니까? 이렇게하면 몇 가지 추가 옵션 (here's an example)이 제공 될 수 있습니다.

+0

좋은 지적입니다. 아마도 스윙 사용을 멈춰야 할 것입니다. – Jeremy

+0

@ 제레미, 제레미, 스윙에 더 많은 작업이 필요할 것입니다. 매우 강력합니다. (어느 정도 시간이 걸릴 수도 있습니다.) – OscarRyz

1

간단한 HTML을 표시 활용할 수 있습니다, 그것은 준다 통지 안에 정상 JFrame의를 제공합니다 완전한 통제하에있는 .

http://jcarrierpigeon.sourceforge.net/

관련 문제