下面给出了示例代码:
String message = 'You got a new notification message. Isn't it awesome to have such a notification message.';
String header = 'This is header of notification message';
JFrame frame = new JFrame();
frame.setSize(300,125);
frame.setLayout(new GridBagLayout());
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;
JLabel headingLabel = new JLabel(header);
headingLabel .setIcon(headingIcon); // --- use image icon you want to be as heading image.
headingLabel.setOpaque(false);
frame.add(headingLabel, constraints);
constraints.gridx++;
constraints.weightx = 0f;
constraints.weighty = 0f;
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.NORTH;
JButton cloesButton = new JButton('X');
cloesButton.setMargin(new Insets(1, 4, 1, 4));
cloesButton.setFocusable(false);
frame.add(cloesButton, constraints);
constraints.gridx = 0;
constraints.gridy++;
constraints.weightx = 1.0f;
constraints.weighty = 1.0f;
constraints.insets = new Insets(5, 5, 5, 5);
constraints.fill = GridBagConstraints.BOTH;
JLabel messageLabel = new JLabel('<HtMl>'+message);
frame.add(messageLabel, constraints);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
其输出将是:
在这里,我创建了一个JFrame并添加了两个标签; 第一个是headingLabel,它是标题标签,第二个是messageLabel,它将包含消息信息; 和一个关闭按钮。 我已经使用了GridBagLayout,但是您可以使用任何选择。
现在,要使该框架看起来像一个弹出窗口,我们必须从该框架中删除标题栏和边框。 为此,在frame.setSize(…)之后添加以下行: :
frame.setUndecorated(true);
现在的输出将是:
请注意,由于没有标题栏关闭按钮,因此现在无法关闭我们的框架。 因此,要使我们的关闭按钮可以用作框架关闭按钮,请更改其声明,如下所示:
JButton cloesButton = new JButton(new AbstractAction('x') {@Overridepublic void actionPerformed(final ActionEvent e) {frame.dispose();}
});
添加后,您将收到错误消息“无法引用用其他方法定义的内部类中的非最终变量框架”。 要摆脱此错误,您可以采用以下解决方案之一:
- 使您的框架变量最终。
- 使您的框架变量成为类中的全局变量。
- 使您的类扩展JFrame并完全删除frame变量。
现在,当您运行程序时,它的外观将与图2相同,但是现在您可以通过单击closeButton来关闭框架。
您会注意到您的框架出现在屏幕顶部,因此在创建框架后将其更改为屏幕右下角的位置,添加以下几行:
Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();// size of the screen
Insets toolHeight = Toolkit.getDefaultToolkit().getScreenInsets(frame.getGraphicsConfiguration());// height of the task bar
frame.setLocation(scrSize.width - frame.getWidth(), scrSize.height - toolHeight.bottom - frame.getHeight());
现在,当您运行它时,它将如下所示:
现在,要使其在预定时间后消失,请在末尾添加以下几行:
new Thread(){@Overridepublic void run() {try {Thread.sleep(5000); // time after which pop up will be disappeared.frame.dispose();} catch (InterruptedException e) {e.printStackTrace();}};
}.start();
至此,您已经成功创建了一个弹出通知,该通知将出现在屏幕的右下角,如果未单击关闭按钮,则将在一段时间后消失。
因此,作为最后的修饰,您可以通过应用外观和感觉或在框架中应用不同的颜色来根据需要进行设计。
您还可以通过添加以下内容使其显示在所有窗口的顶部:
frame.setAlwaysOnTop(true);
在上面的代码块中需要注意的一些事情:
1. messageLabel中的<HtMl>标签。 它是使标签自动换行。 但是请确保您在消息中发短信的长度不超过特定的长度。 您可以根据需要调整此高度和弹出窗口的高度。
2. “ headingIcon” 未在代码中声明。 它是您要使用的图像图标,而不是屏幕快照中的作为标题标题图标的恶魔图标。 样本声明如下所示:
ImageIcon headingIcon = new ImageIcon(“ image_url”);
3. 当前,我们的弹出窗口会在任务栏中显示一个新窗口,因此,如果您希望在任务栏中没有弹出窗口,请将JFrame更改为JDialog。
4. 在上面的代码中,默认的超时时间是5秒,您可以根据需要通过编辑以下代码行来更新弹出窗口消失之前的默认超时:
Thread.sleep(5000); //弹出窗口消失的时间。
5. 要使关闭按钮看起来像默认标题栏的关闭按钮“ x”,则显示在其文本中。 如果需要,可以将其关闭。
希望这对您有所帮助。
祝您编程愉快,别忘了分享!
参考: 用Java弹出创建新消息通知。 来自我们的JCG合作伙伴 Harsh Raval,来自harryjoy博客。
翻译自: https://www.javacodegeeks.com/2012/10/create-new-message-notification-pop-up.html