问题描述
|
如何在Java swing中显示ms Outlook的通知(如弹出窗口)?可能吗?还有其他选择吗?
解决方法
这是您的通知弹出窗口:
带有示例的代码:
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,getHeight() / 2,new float[] { 0f,0.3f,1f },new Color[] { new Color(0.8f,0.8f,1f),new Color(0.7f,0.7f,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,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);
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,4));
b.setFocusable(false);
c.add(b,constraints);
f.setVisible(true);
}
});
}
}
, 您将需要查看系统托盘API。 displayIcon方法应满足您的需求:
在托盘附近显示弹出消息
图标。该消息将在
时间或用户单击时间。
点击该消息可能会触发
ActionEvent。
, 只需使用未修饰的JFrame(frame.setUndecorated(true)),然后使用Toolkit.getDefaultToolkit()。getScreenSize()计算位置和大小。
, 您可以使用JTelegraph获取彩色弹出窗口。您所要做的就是获取其jar文件(您还需要再获取两个jar文件)并将其包含在构建路径中并开始编码。
这里给出了详细而简单的说明-http://tphangout.com/?p=41