Как создать уведомление в колебании

Используя Java и Swing, там какой-либо (удобный) способ создать уведомление? Уведомлением я имею в виду что-то как:

this , this
(источник: maketecheasier.com)
, или this
(источник: microsoft.com)

(Есть ли более правильный термин для этого?). Было бы хорошо, если бы это работало межплатформенное, но я главным образом обеспокоен им работающий в соответствии с Ubuntu с Gnome. Если бы вообще возможный, я хотел бы постараться не иметь значок в системном лотке / область уведомлений.

Если все остальное перестало работать, я мог бы всегда использовать скользящее уведомление от Скользящей панели Уведомления в Java (а-ля Firefox)

20
задан Glorfindel 2 August 2019 в 03:07
поделиться

3 ответа

Возможно, вам понадобится полупрозрачная рамка без украшений.

Быстрая демонстрация

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();
            }
    }
}
27
ответ дан 29 November 2019 в 23:19
поделиться

Я не пользовался этим, но JToaster выглядит так, будто он может подойти. Кроме того, не хотите ли вы использовать SWT? Это может дать вам некоторые дополнительные возможности (вот пример).

5
ответ дан 29 November 2019 в 23:19
поделиться

Стандартный способ сделать это - использовать Swing TrayIcon API. Вероятно, это тоже будет наиболее удобным способом :)

15
ответ дан 29 November 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: