📜  Java摇摆 |创建 Toast 消息

📅  最后修改于: 2022-05-13 01:54:54.718000             🧑  作者: Mango

Java摇摆 |创建 Toast 消息

什么是吐司消息?以及如何使用Java Swing 创建它们?
Toast Messages 是一种通过简短的弹出消息通知用户的快速方法,这些消息会持续很短的时间然后消失。

Java Swing 没有用于 toast 消息的内置类,但 toast 消息是一种流行且有效的显示自动过期消息的方法,该消息仅显示很短的时间。因此,为了实现 toast 消息,我们必须手动构建一个能够创建 toast 消息的类。

在本文中,我们将讨论如何使用Java Swing 组件在Java中手动创建 toast 消息。以下程序将创建一个持续短时间的文本 toast 消息,然后它们将消失。

有关半透明窗口和框架的更多详细信息,请阅读以下文章,这将为您提供如何实现半透明和形状窗口的想法。
Java摇摆 | Java中的半透明和形状窗口
JSwing |半透明和异形窗口

以下程序创建 toast 消息(这是一个选择性半透明的 JWindow)

// Java program that creates the toast message
//(which is a selectively translucent JWindow)
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class toast extends JFrame {
  
    //String of toast
    String s;
  
    // JWindow
    JWindow w;
  
    toast(String s, int x, int y)
    {
        w = new JWindow();
  
        // make the background transparent
        w.setBackground(new Color(0, 0, 0, 0));
  
        // create a panel
        JPanel p = new JPanel() {
            public void paintComponent(Graphics g)
            {
                int wid = g.getFontMetrics().stringWidth(s);
                int hei = g.getFontMetrics().getHeight();
  
                // draw the boundary of the toast and fill it
                g.setColor(Color.black);
                g.fillRect(10, 10, wid + 30, hei + 10);
                g.setColor(Color.black);
                g.drawRect(10, 10, wid + 30, hei + 10);
  
                // set the color of text
                g.setColor(new Color(255, 255, 255, 240));
                g.drawString(s, 25, 27);
                int t = 250;
  
                // draw the shadow of the toast
                for (int i = 0; i < 4; i++) {
                    t -= 60;
                    g.setColor(new Color(0, 0, 0, t));
                    g.drawRect(10 - i, 10 - i, wid + 30 + i * 2,
                               hei + 10 + i * 2);
                }
            }
        };
  
        w.add(p);
        w.setLocation(x, y);
        w.setSize(300, 100);
    }
  
    // function to pop up the toast
    void showtoast()
    {
        try {
            w.setOpacity(1);
            w.setVisible(true);
  
            // wait for some time
            Thread.sleep(2000);
  
            // make the message disappear  slowly
            for (double d = 1.0; d > 0.2; d -= 0.1) {
                Thread.sleep(100);
                w.setOpacity((float)d);
            }
  
            // set the visibility to false
            w.setVisible(false);
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

运行上述程序的驱动程序。

// Java Program to create a driver class to run 
// the toast class
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class driver extends JFrame implements ActionListener {
  
    // create a frame
    static JFrame f;
  
    // textfield
    static JTextField tf;
  
    public static void main(String args[])
    {
        // create the frame
        f = new JFrame("toast");
  
        driver d = new driver();
  
        // textfield
        tf = new JTextField(16);
  
        // button
        Button b = new Button("create");
  
        // add action listener
        b.addActionListener(d);
  
        // create a panel
        JPanel p = new JPanel();
  
        p.add(tf);
        p.add(b);
  
        // add panel
        f.add(p);
  
        // setSize
        f.setSize(500, 500);
  
        f.show();
    }
  
    // if button is pressed
    public void actionPerformed(ActionEvent e)
    {
  
        // create a toast message
        toast t = new toast(tf.getText(), 150, 400);
  
        // call the method
        t.showtoast();
    }
}

输出 :

注意:此程序不会在在线 IDE 中运行,请使用带有最新版本Java的离线 IDE。