用Java弹出创建新的消息通知

首先创建JFrame作为弹出窗口。 在其中添加一些JLabel以包含信息,并在适当的位置分配它们,使其看起来像一条通知消息。

下面给出了示例代码:

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();}
});

添加后,您将收到错误消息“无法引用用其他方法定义的内部类中的非最终变量框架”。 要摆脱此错误,您可以采用以下解决方案之一:

  1. 使您的框架变量最终。
  2. 使您的框架变量成为类中的全局变量。
  3. 使您的类扩展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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql游标表间数据迁移_FalseMySQL存储过程--gt;通过游标遍历和异常处理迁移数据到历史表-mysql-第二电脑网...

-- 大表数据迁移,每天凌晨1点到5点执行,执行间隔时间10分钟&#xff0c;迁移旧数据到历史表。DELIMITER $$USE dbx$$电脑技术网对《FalseMySQL存储过程-->通过游标遍历和异常处理迁移数据到历史表》总结来说&#xff0c;为我们程序员很实用。DROP PROCEDURE IF EXISTS pro_x…

课后作业-阅读任务-阅读笔记-2

好的单元测试的标准&#xff1a; 1>单元测试应该在最基本的功能/参数上验证程序的正确性 2>单元测试必须由最熟悉代码的人&#xff08;程序的作者&#xff09;来写 3>单元测试后&#xff0c;机器状态保持不变 4>单元测试要快&#xff08;一个测试的运行时间是几秒钟…

定位-固定定位

把box2设为固定定位&#xff1a; <!DOCTYPE html> <html lang"en" dir"ltr"><head><meta charset"utf-8"><title>定位</title><style media"screen">.box1{width:100px; height: 100px;ba…

垃圾自动回收

自动回收 自动回收的语言&#xff1a;根据变量是否还被引用&#xff0c;来确定是否应该回收Javascript内存泄露 由于js回调及闭包的特性&#xff0c;当方法嵌套太多的时候&#xff0c;可能回最外层的变量可能一直都被引用着&#xff0c;这样就导致变量一直没有被回收&#xff0…

Java并发执行器的懒惰开发人员简介

如果我告诉您util.concurrent API自2004年起提供此类服务&#xff0c;我就会自欺欺人。但是&#xff0c;我想回顾一下一些很酷的功能。 并发专家&#xff0c;现在是时候关闭该窗口了。 所有其他人&#xff0c;请紧紧抓住乐趣。 你不会忘记你的根源 执行程序是具有单个执行方法…

《我们应该怎样做需求分析》阅读笔记

认识&#xff1a;软件需求分析是贯穿软件项目从出生到成长或者死亡的&#xff0c;我们必须搞清楚到手的软件是为了什么要做什么做成什么样&#xff0c;通过顾客的描述彼此的合作分析需求与业务逻辑&#xff0c;不断改进从而实现软件在合理范围内符合顾客要求。 怎么做&#xff…

Java代码格式化算法_一个时间格式化的工具类:TimeUtil

源代码如下&#xff1a;import android.content.Context;import android.text.TextUtils;import android.text.format.DateUtils;import java.text.Format;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.regex.Matcher…

(转)VS2010/MFC编程入门之前言

鸡啄米的C编程入门系列给大家讲了C的编程入门知识&#xff0c;大家对C语言在语法和设计思想上应该有了一定的了解了。但是教程中讲的例子只是一个个简单的例程&#xff0c;并没有可视化窗口。鸡啄米在这套VS2010/MFC编程入门教程中将会给大家讲解怎样使用VS2010进行可视化编程&…

JavaOne 2012:JavaFX图形技巧和窍门

我回到希尔顿&#xff08;皇家宴会厅B&#xff09;看了Richard Bair的&#xff08;Oracle Java客户架构师&#xff09;的“ JavaFX图形技巧和窍门”。 Bair与FX Experience相关联&#xff0c;并且显然了解JavaFX。 拜尔说&#xff0c;他演讲的主题是表演。 他告诫说&#xff0c…

web前端知识点1

1. input属于窗体元素,层级显示比flash、其它元素都高。请判断这句话的正确与否。 错误 层级显示优先级&#xff1a; frameset > 表单元素 > 非表单元素 在html中&#xff0c;帧元素&#xff08;frameset&#xff09;的优先级最高&#xff0c;表单元素比非表单元素的优…

18. 使用模板【从零开始学Spring Boot】

转&#xff1a;http://blog.csdn.net/linxingliang/article/details/52017098 18.1 使用thymeleaf 整体步骤&#xff1a; &#xff08;1&#xff09; 在pom.xml中引入thymeleaf; &#xff08;2&#xff09; 如何关闭thymeleaf缓存 &#xff08;3&#xff09; …

java单元测试算初级_Java____Eclipse下JUnit单元测试(初级)

给大家分享一个链接希望对你们有帮助 http://blog.csdn.net/huangbiao86/article/details/6709742今天看图片命名唯一的策略时看到有个大大用JUnit测试&#xff0c;神奇的样子&#xff0c;遂上网搜集来三篇JUnit测试的入门文章&#xff0c;作为参考。原作地址在上面&#xff0c…

Hadoop + Amazon EC2 –更新的教程

在Hadoop的Wiki页面上放置了一个旧教程&#xff1a; http : //wiki.apache.org/hadoop/AmazonEC2 &#xff0c;但是最近我不得不遵循本教程&#xff0c;并且我注意到它没有涵盖某些Amazon新功能。 建议您已经熟悉Hadoop的基础来遵循本教程&#xff0c;可以在Hadoop的主页http:…

oracle11g 修改字符集 修改为ZHS16GBK

转&#xff1a;http://www.cnblogs.com/jay-xu33/p/5210098.html oracle11g 修改字符集 修改为ZHS16GBK1.cmd下,cd到oracle数据库软件的服务器端 如&#xff1a;D:\app\Administrator\product\11.2.0\dbhome_1\BIN 2.输入set ORACLE_SID你想进入的数据库的那个sid 3.输入 sqlpl…

浏览器内核

浏览器的四大内核&#xff1a; Trident&#xff0c;Gecko&#xff0c;Webkit&#xff0c;Blink。 不同的内核对网页编写语法的解释也有不同&#xff0c;进而导致同一个页面在不同内核的浏览器下显示出来的效果也会有所出入&#xff0c;这也是作为一个前端工程师需要了解不同浏…

2017.4.14 Java String.split()用法小结

在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅供大家参考: 1、如果用“.”作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split("."); 2、如果用“|”作为分隔的话,必…

java线程统一_Java线程结果不一致

我有一个实现可运行的线程类和一个int计数器作为实例变量。两种同步方法add和sub。当我以某种方式运行测试类时&#xff0c;它几次会输出错误的结果。据我了解&#xff0c;当方法同步时&#xff0c;整个对象将被锁定以供其他线程访问&#xff0c;这种逻辑每次我们都应该获得相同…

markdown-Macdown

#标题 [页面锚点](#name) > <a name"name"></a>文字 **加粗**(Command-B) *斜体*(Command-I) * * * 或者 - -- 无序列表 1. 2. 3. 有序列表 、、、 代码段 、、、 或者用 ~ 代替 或者 上下空一行每行缩进4个空格 <http://www.baidu.com>链…

什么是web标准??

web标准 不是某一个标准&#xff0c;而是一系列标准的集合。网页主要由三部分组成&#xff1a;结构&#xff08;Structure&#xff09;、表现&#xff08;Presentation&#xff09;和行为&#xff08;Behavior&#xff09;。对应的标准也分三方面&#xff1a;结构化标准语言主…

有没有更好的Marker方法?

自Java 1.5推出以来&#xff0c;就是否在Java中使用Marker接口进行了广泛的讨论和辩论。 这是因为Java 1.5引入了注释功能&#xff0c;这些功能几乎可以解决Marker接口的目的。 本文将涵盖这场辩论的一个有趣的部分。 定义&#xff1a; Java中的标记接口是一个空接口&#xff…