热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java实现与Word风格相似的菜单

最后一次更新于20190709菜单效果演示图MicrosoftWord本程序菜单简单的菜单布局设计这个项目是人机交互设计课程的一个小作业。不过该作业的要求是不需要编写任何代码的。但

最后一次更新于 2019/07/09

菜单效果演示图

Microsoft Word
《Java 实现与 Word 风格相似的菜单》

本程序菜单
《Java 实现与 Word 风格相似的菜单》

简单的菜单布局设计

这个项目是人机交互设计课程的一个小作业。

不过该作业的要求是不需要编写任何代码的。

但为了体现我们小组的设计和分组理念,我还是决定编写一个菜单小程序,该程序有灵活的布局,是微软的 Word 编辑器和 IntelliJ IDEA 编辑器布局的综合。

我们小组需要处理的所有功能已经预先被分类成如下几种名称:
《Java 实现与 Word 风格相似的菜单》

功能分组原理

功能性

根据 功能相似的应该放在一起 的原则来布局所属的按钮。

  • 例如,空白文本,加粗文本,斜体文本和下划线文本。

时序性

根据 功能的分组可以反应执行的顺序 的原则来布局所属的按钮。

  • 例如,先复制后粘贴。

使用频率

根据 使用频率相似的功能应该放在一起 的原则来布局所属的按钮。通常常用操作都会在工具栏里使用户能直接点击。

  • 例如,保存和打印。
菜单设计原理

费茨法则

按钮的面积越大越好。而用户的鼠标指针和按钮之间的距离越小越好。因为这意味着用户实现功能的时间变少。

人类是会犯错误的

设计过程中要尽量避免误导用户。

比如说,如果先使用户看到“保存为”功能而不是“保存”功能的话很可能使用户误认为“保存为”即是“保存”功能。

人类的失误

设计过程中要尽量避免用户意外点中不相关的功能。

比如说,用户可能误点中“删除”而不是“粘贴”如果这两个功能紧挨在一起的话。

Java 编程实现

从各类文本编辑器和以上原理的灵感激发下,我决定做出灵活布局的菜单。

常见的操作会用工具栏来实现,它们被包裹在子菜单中。

子菜单 可以利用 JToolBar 实现,当用户点击其他的子菜单时当前显示的子菜单应从 JFrame 移除。

举个例子

public void menuSelected(MenuEvent e) {
if(toolbar != null) {
toolbar.setVisible(false);
frame.remove(toolbar);
}
if(viewbar == null) {
viewbar = new JToolBar();
JMenuBar menuBar = new JMenuBar();
// 页面。
ImageIcon pageIcon = new ImageIcon("src/images/page.png");
JMenu page = new JMenu("View Page");
page.setIcon(pageIcon);
menuBar.add(page);
// 页面所在位置。
ImageIcon posIcon = new ImageIcon("src/images/position.png");
JMenu position = new JMenu("Position");
position.setIcon(posIcon);
menuBar.add(position);
// 显示文档。
ImageIcon docIcon = new ImageIcon("src/images/documents.png");
JMenu document= new JMenu("Alternative Document");
document.setIcon(docIcon);
menuBar.add(document);
viewbar.add(menuBar);
}
frame.add(viewbar, BorderLayout.PAGE_START);
viewbar.setVisible(true);
frame.setVisible(true);
}

对于快捷键的实现而言,我们需要调用 setAccelerator() 函数来设置快捷键。

比方说,

toolItem = new JMenuItem("Delete");
toolItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DELETE, 0));

接着,我们应该为每个按钮设置一个图标以此来提醒用户点击该按钮会发生什么。

这部分的实现比较简单:

ImageIcon pageIcon = new ImageIcon("src/images/page.png");
JMenu page = new JMenu("View Page");
page.setIcon(pageIcon);

源码

如果我的文章可以帮到您,劳烦您点进源码点个 ★ Star 哦!
https://github.com/Hephaest/M…


推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
author-avatar
殇心Long
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有