如何在java swing中显示ms outlook的弹出通知?可能吗?对此有任何其他选择吗?
答案 0 :(得分:12)
这是您的通知弹出窗口:
代码示例:
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 API。 displayIcon方法可以满足您的需求:
在托盘附近显示弹出消息 图标。消息将在消失后消失 一段时间或用户点击它。 单击该消息可能会触发 的ActionEvent。
答案 2 :(得分:1)
只需使用未修饰的JFrame(frame.setUndecorated(true))并使用Toolkit.getDefaultToolkit()。getScreenSize()计算位置和大小。
答案 3 :(得分:0)
您可以使用JTelegraph获取彩色弹出窗口。你所要做的就是获取它的jar文件(你还需要再获取两个jar文件)并将它包含在你的构建路径中并开始编码。
这里给出了详细而简单的说明 - http://tphangout.com/?p=41