如何在java中显示ms outlook的popup通知?

时间:2011-05-30 09:40:57

标签: java swing popup

如何在java swing中显示ms outlook的弹出通知?可能吗?对此有任何其他选择吗?

enter image description here

4 个答案:

答案 0 :(得分:12)

这是您的通知弹出窗口:

Popup

代码示例:

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.LinearGradientPaint;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class NotificationPopup extends JDialog {
  private final LinearGradientPaint lpg;

  public NotificationPopup() {
    setUndecorated(true);
    setSize(300, 100);

    // size of the screen
    final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

    // height of the task bar
    final Insets scnMax = Toolkit.getDefaultToolkit().getScreenInsets(
        getGraphicsConfiguration());
    final int taskBarSize = scnMax.bottom;

    setLocation(screenSize.width - getWidth(), screenSize.height - taskBarSize
        - getHeight());

    // background paint
    lpg = new LinearGradientPaint(0, 0, 0, getHeight() / 2, new float[] { 0f,
        0.3f, 1f }, new Color[] { new Color(0.8f, 0.8f, 1f),
        new Color(0.7f, 0.7f, 1f), new Color(0.6f, 0.6f, 1f) });

    // blue background panel
    setContentPane(new BackgroundPanel());
  }

  private class BackgroundPanel extends JPanel {
    public BackgroundPanel() {
      setOpaque(true);
    }

    @Override
    protected void paintComponent(final Graphics g) {
      final Graphics2D g2d = (Graphics2D) g;
      // background
      g2d.setPaint(lpg);
      g2d.fillRect(1, 1, getWidth() - 2, getHeight() - 2);
      g2d.setColor(Color.BLACK);

      // border
      g2d.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
    }
  }

  public static void main(final String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        try {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (final Exception e1) {
          e1.printStackTrace();
        }

        final NotificationPopup f = new NotificationPopup();

        final Container c = f.getContentPane();
        c.setLayout(new GridBagLayout());

        final GridBagConstraints constraints = new GridBagConstraints();
        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.weightx = 1.0f;
        constraints.weighty = 1.0f;
        constraints.insets = new Insets(5, 5, 5, 5);
        constraints.fill = GridBagConstraints.BOTH;

        final JLabel l = new JLabel("You have got 2 new Messages.");
        l.setOpaque(false);

        c.add(l, constraints);

        constraints.gridx++;
        constraints.weightx = 0f;
        constraints.weighty = 0f;
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.NORTH;

        final JButton b = new JButton(new AbstractAction("x") {

          @Override
          public void actionPerformed(final ActionEvent e) {
            f.dispose();
          }
        });

        b.setOpaque(false);
        b.setMargin(new Insets(1, 4, 1, 4));
        b.setFocusable(false);

        c.add(b, constraints);

        f.setVisible(true);
      }
    });
  }
}

答案 1 :(得分:2)

您需要查看System Tray APIdisplayIcon方法可以满足您的需求:

  

在托盘附近显示弹出消息   图标。消息将在消失后消失   一段时间或用户点击它。   单击该消息可能会触发   的ActionEvent。

答案 2 :(得分:1)

只需使用未修饰的JFrame(frame.setUndecorated(true))并使用Toolkit.getDefaultToolkit()。getScreenSize()计算位置和大小。

答案 3 :(得分:0)

您可以使用JTelegraph获取彩色弹出窗口。你所要做的就是获取它的jar文件(你还需要再获取两个jar文件)并将它包含在你的构建路径中并开始编码。

这里给出了详细而简单的说明 - http://tphangout.com/?p=41