之所以叫《JAVA应用 之 快捷工具托盘++》,是因为昨天在站里看到一哥们发的《快捷工具托盘》http://snkcxy.iteye.com/blog/1810057,自己闲来无事,重构了下他的代码,用Swing写了个UI,本质上还是去调用Runtime执行OS命令。还是一样,opensource,可以下载全部源码, 有图有真相,承认难看的不是有一点:), 本人微博:http://weibo.com/terrancetian,欢迎留言
呵呵,找不到好看的logo,就随便用了新浪微博的。。。
这个关于,还是当年自己写的毕设时用的,直接拉来用了,懒的。。。
哦了,上code,首先,我把那一大堆命令都搞到了资源文件里,然后写个Properties去读:
public class PropertiesUtil {
public final static String COMMAND_LIB = "com/objectivasoft/terrance/properties/all_comand.properties";
/**
* 加载属性文件, 初始化命令库
* @param path
* @return
*/
public static Properties getProperties(){
Properties prop = new OrderedProperties();
try {
prop.load(PropertiesUtil.class.getClassLoader().getResourceAsStream(COMMAND_LIB));
} catch (Exception e) {
// logger.error(path + " 加载失败!");
JOptionPane.showMessageDialog(null, "初始化命令库失败!", "ERROR", JOptionPane.ERROR_MESSAGE);
}
return prop;
}
这里说明一下http://snkcxy.iteye.com/blog/1810057,这哥们也说到HashMap的问题,我的Properties也是继承自HashTable,都是无需的元素,所以我重写了Properties的主要方法,用LinkedHashSet去拿资源,这样保证map的有序性和资源文件保持一致,不想贴代码了,请参考:http://unmi.cc/ordered-java-properties-class
下来就是来到久违的java Swing了:
public class ToolsPanel extends JFrame {
private static final long serialVersionUID = 1541995806128793897L;
//这玩意就是从资源文件里拿出来的map
private static final Properties commandProp = PropertiesUtil.getProperties();
//插件上的按钮
private JButton comandBtns[];
//构造方法
public ToolsPanel() {
super("快捷托盘");
init();
}
@PostConstruct
private void init() {
constractComponent();
constractLayout();
}
/** 构造界面上的按钮 */
private void constractComponent(){
List<String> commands = new ArrayList<String>();
for (Object item : commandProp.keySet()) {
commands.add((String)item);
}
//构造按钮,并注册事件
comandBtns = new JButton[commandProp.size()];
for (int i = 0; i < commands.size(); i++) {
//又是新浪。。。
comandBtns[i] = new JButton(commands.get(i), new ImageIcon("src/com/objectivasoft/terrance/misc/sina.png"));
comandBtns[i].setBackground(Color.LIGHT_GRAY);
//注册点击事件
comandBtns[i].addActionListener(new ComandHandler((String) commandProp.get(comandBtns[i].getText())));
this.add(comandBtns[i]);
}
}
/** 构造界面布局 */
private void constractLayout(){
//网格布局管理器
this.setLayout(new GridLayout(comandBtns.length, 1));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(false);
this.setBounds(ComInfo.w/2-150,ComInfo.h/2-200,180,240);
//嘿嘿,直接就用新浪微博的logo了...
String src = "/img/sina.png";
try {
Image image=ImageIO.read(this.getClass().getResource(src));
this.setIconImage(image);
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个就是注册按钮事件的实现类,其实我更喜欢写Swing时候用匿名内部类,只不过不便读代码:
public class ComandHandler implements ActionListener {
private static final Runtime rt = Runtime.getRuntime();
private String comand;//这玩意就是按钮绑定的命令
public ComandHandler(String comand) {
super();
this.comand = comand;
}
@Override
public void actionPerformed(ActionEvent e) {
try {
//关于系统按钮
if (e.getActionCommand().equalsIgnoreCase("\u5173\u4E8E\u63D2\u4EF6")) {
new AboutInfo();
} else if (e.getActionCommand().equalsIgnoreCase("\u9690\u85CF\u5230\u6258\u76D8")) {
//到系统托盘状态,这个就是我重构后的那哥们代码
new SystemToolsTray();
} else {
//执行OS命令
rt.exec(comand);
}
} catch (IOException e1) {
JOptionPane.showMessageDialog(null, "执行系统命令失败!", "错误", JOptionPane.ERROR_MESSAGE);
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, "系统异常!", "错误", JOptionPane.ERROR_MESSAGE);
}
}
}
哦了,那哥们的SystemToolsTray类,就不贴了,我主要重构的也就是把那一大堆map从properties里读了下,剩下也没做什么,项目里重要的就是那些东东了,其他的都在项目附件里。对了,运行RunUI.java就是项目入口。
ps:项目没怎么仔细搞,有些bug懒得改了,不过有一个问题还请各位大虾帮忙解决下,就是在系统托盘状态有中文乱码问题,现在还没想到什么办法解决:)
分享到:
相关推荐
SystemTray类属于java.awt包,它允许Java应用程序将图标显示在系统托盘中。用户可以通过点击这些图标来执行特定的任务,比如打开一个应用程序或执行一个系统命令。 程序的核心思路是创建一个菜单(使用PopupMenu类...
Java仿QQ截图工具是一款基于Java编程语言开发的实用程序,旨在提供类似QQ截图的功能,让用户能够方便快捷地进行屏幕捕获。这款工具的核心亮点在于它的系统托盘集成,允许用户在后台轻松启动和操作截图功能,同时具备...
在IT领域,托盘工具(TrayIcon)是一种常见的用户界面设计元素,它允许应用程序在系统托盘(通常位于任务栏右下角)显示图标,从而提供便捷的访问和控制功能。这种技术常用于需要在后台运行或者不占用桌面空间的应用...
在IT领域,托盘控件(Tray Icon)是一种常见的用户界面元素,它允许应用程序在系统托盘(通常位于任务栏右下角)显示图标,从而提供便捷的访问和通知功能。"托盘控件源代码很不错"这个标题表明我们讨论的是一个高...
1. 图标显示:托盘区会显示各种应用程序的图标,例如防病毒软件、即时通讯工具、系统状态指示器等。这些图标可以提供实时状态更新,帮助用户了解系统的运行情况。 2. 快捷操作:右键点击托盘区的图标,通常会弹出一...
总的来说,实现一个类似QQ截图的Java应用涉及到多个组件和技术,包括键盘事件监听、屏幕截图、图像处理、系统托盘操作等。通过合理组合和运用这些技术,我们可以创建出一款功能完备且易于使用的截图工具。
标题提到的“可以将应用程序托盘到任务栏右下角的实用程序”是一种能够帮助开发者或用户将他们的应用程序最小化到这个区域的工具。 这种实用程序的核心功能在于提供一种方式,使得应用程序在不占用主屏幕空间的情况...
总的来说,桌面小闹钟和托盘闹钟软件是提升个人时间管理能力的有效工具,它们利用现代计算机技术为用户提供方便快捷的提醒服务。"myclock"这一软件代表了这一类应用,用户可以通过下载和使用来体验其功能,实现高效...
3. **设置快捷操作**:系统托盘图标可以关联菜单,用户可以通过右键点击图标来执行一些快捷操作,如打开配置、退出程序等。 4. **提示与通知**:系统托盘图标可以用于显示提醒或通知,例如邮件到达、系统更新等。...
Launch4j是一个流行的免费工具,它允许开发者将Java应用打包成exe,同时提供了一些配置选项,如指定主类、设置JRE版本、添加快捷方式等。使用Launch4j,你可以定义程序的图标、最小化到系统托盘、处理命令行参数等...
总之,这段Java代码展示了如何使用Java Swing库和AWT工具类库创建一个具备基本GUI界面、事件响应能力以及系统托盘图标显示功能的词典应用。通过对这段代码的分析,我们不仅了解了Java GUI编程的基本框架,还学习了...
在Java编程领域,系统托盘(System Tray)也被称为通知区域或系统托盘图标,它允许应用程序在操作系统任务栏的右下角显示一个...它使得开发者能够更方便地在Java应用中创建具有系统托盘功能的用户界面,提升用户体验。
"托盘图标(最小化时显示)"这个主题主要涉及的是当应用程序最小化到任务栏时,如何让它们的图标仍然在托盘区域可见,以便用户可以方便地与这些程序交互。 1. **托盘区域的用途**: - 提供快速访问:用户可以通过...
它允许Java应用实现诸如系统托盘图标、文件关联、启动菜单项等功能,这些都是传统Java平台所不支持或者支持不足的。`jdic.dll`提供了这些功能的底层实现,使得开发者可以编写更接近原生应用的Java程序。 其次,`...
- **系统托盘图标**:JDIC提供了对系统托盘图标的全面支持,允许Java应用像其他原生应用一样使用系统托盘图标进行状态显示或快捷操作。 - **浏览器嵌入**:JDIC支持将Web浏览器直接嵌入到Java应用中,实现浏览器与...
`jdic.jar`通常包含了用于日语处理的字典和解析引擎,为Java应用程序提供日语输入、拼写检查、词汇转换等功能。开发者可以借助这个库来构建具有强大日语支持的应用,例如文本编辑器、翻译工具等。 接下来,`jdic....
它允许应用程序在不占据任务栏主工作区的情况下显示状态和提供快捷操作。 2. **托盘图标的功能**: - **状态指示**:显示程序的运行状态,如网络连接、电池电量、音量等。 - **隐藏窗口**:允许程序窗口最小化到...
这些图标通常用于通知用户应用程序的状态或提供快捷操作。 在IT领域,了解如何适当地设计和使用系统托盘图标是非常重要的。以下是一些相关的知识点: 1. 图标尺寸:系统托盘图标通常遵循特定的尺寸标准,如本例中...
在IT领域,光驱开、关控制以及托盘动态图标的源码开发是一项常见的任务,尤其是在桌面应用软件的开发中。这项技术涉及到操作系统接口的调用、系统事件的监听以及图形用户界面(GUI)的设计。以下是对这个主题的详细...