plc万能解锁器_从零开始写文本编辑器(十七):添加开发者模式

前言

我最早听过同一个应用程序有不同的视图界面,叫留“后门”,那是在90年代未。00年代从自Android手机普及后,“开发者模式”这个词出现在我们眼前。

在过往的项目中,会用到这种设计,它主要有几类好处:

  1. 功能解锁。用极小的改动,让用户傻瓜式操作解锁一些特定功能;
  2. 黑盒测试。当出应用程序现异常时,对应用程序无需打任何补丁,就可以测试黑盒内部的逻辑;
  3. 协同测试。开启后,可以联系用户协同调试;
  4. 切换风格。可以在切换开发视图与普通用户视图,比较不同的区别;
  5. 隐藏彩蛋。

案例分析

开发者模式是一个很棒的设计,已经在各软件网站应用。比如:

  • B站的粉丝视图/新访客视图

8b73f4ae8bb35af734c7d44dea4ffe0b.png
  • Android 各版本的开发者模式
很多玩家是为了看版本彩蛋,才了解开发者模式。

一般是

设置--开发者选项--版本号(连击5次),就能启用“开发者模式”

开发者模式提供对:网络/显卡/内存/CPU/磁盘/屏幕等技术参数曲和测试数据。

48487eb760139ab30a46a18e135b2aae.png

向文本编辑器添加开发者模式

我首先要添加一处开关,不用做太复杂,就用简单的单选按钮。

  • 向目录树添加“开发者”结点
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class TreePreference extends JTree {

	private static final long serialVersionUID = 1L;

	public TreePreference() {
		super();
		addComponentListener(new ComponentAdapterTreePreference());
		setRootVisible(false);
		setCellRenderer(new TreeCellRendererPreference());
		init();
	}

	private void init() {
		DefaultMutableTreeNode root = new DefaultMutableTreeNode();
		DefaultTreeModel treeModel = new DefaultTreeModel(root);
		...
		root.add(new DefaultMutableTreeNode("developer"));
		setModel(treeModel);
	}
}
  • 向右侧面板添加“开发者”页面
import java.awt.CardLayout;

import javax.swing.JPanel;

public class PanelPreferenceContent extends JPanel {

	private static final long serialVersionUID = 1L;

	private CardLayout cardLayout;

	public PanelPreferenceContent() {
		super();
		setLayout(cardLayout = new CardLayout());
		init();
	}

	private void init() {
		...
		add(new PanelPreferenceDeveloper(), "developer");
	}

	public CardLayout getCardLayout() {
		return cardLayout;
	}

	public void show(String stringId) {
		cardLayout.show(PanelPreferenceContent.this, stringId);
	}
}

603aa9221e556ae6aed3f6376e04a797.png
在偏好添加开发者页面
  • 开发者被勾选,记录布尔值为true
import java.util.prefs.Preferences;

import javax.swing.JCheckBox;
import javax.swing.JPanel;

public class PanelPreferenceDeveloper extends JPanel {

	private static final long serialVersionUID = 1L;
	
	private JCheckBox checkBoxDeveloper;

	public PanelPreferenceDeveloper() {
		super();
		{
			JCheckBox checkBox = new JCheckBox(Editor.sInstance.getString("developer"));
			checkBox.setSelected(PreferenceEditor.getPreferences().getBoolean("developer", false));
			add(checkBox);
			checkBoxDeveloper = checkBox;
		}
	}

	public boolean apply() {
		Preferences preferences = PreferenceEditor.getPreferences();
		preferences.putBoolean("developer", checkBoxDeveloper.isSelected());
		return true;
	}

}

到此开关逻辑就完成了。

使用开发者模式

  • 当“开发者”模式被启用时,“测试”菜单才显示。
import javax.swing.JMenuBar;

public class MenuBarMain extends JMenuBar {

	private static final long serialVersionUID = 1L;

	public MenuBarMain() {
		super();
		init();
	}

	private void init() {
		add(new MenuFile());
		add(new MenuView());
		if (PreferenceEditor.getPreferences().getBoolean("developer", false)) {
			add(new MenuTest());
		} // end if
		add(new MenuWindow());
		add(new MenuHelp());
	}

}

9bce3bc0a72109ac8abe875d2f87c799.png
开发者模式下,会出现“测试”菜单

122c0a6f41f02b6c4078a973ec18a91c.png
关闭开发者模式,测试菜单不可见

开者模式到这里就讲清楚了。后续会用这个思想,改进开发者模式版本,产生一些变形应用。但思想仍然是同一个。

关于“开发者”模式的注意事项

  1. 设计开发者模式时,不要太智能
    1. 比如:我这里“测试”菜单要重启程序才生效,不会在勾选后立即出现。
  2. 开发者模式的控制权限应该公平,不能留后门
    1. 能打开,就能关闭,不然就成了BUG,甚至是“后门”,对用户很不友好。
  3. 不能把开发者模式当万能药
    1. 用来隐藏彩蛋时,只能为了幽默有趣,不能为了恶搞或其它目的。
    2. 开发者模式不能替代专业测试工具,它只是一个辅助工具。

我目前用它来测试一些基础功能新功能

  • 基础功能,例如:测试线程未捕捉异常的提示框

1ffb2be951917ee3b22a7ffa4c131af1.png
ActionListener actionListenerTest = new ActionListener() {

	@Override
	public void actionPerformed(ActionEvent e) {
		@SuppressWarnings("unused")
		int i = 1 / 0;
	}
};

f16026c61f1d18ce799091afeb1b57db.png
  • 新功能,例如:多文档子窗口和代码流式着色等等。
    • 进行中...

以上~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用STM32F103RBT6芯片 开发的 PLC文本 与信捷文本功能相同 功能按键的基本功能如下表: 按键 基本功能 [ESC] 不论显示处于显示任何画面,一旦按此键,返回系统初始画面。系统初 始画面由用户设计画面时指定(缺省值为1号画面,0号画面禁用)。一般将 系统初始画面设置成主菜单或使用频度最高的画面。 [ALM] 一旦按此键,返回系统自动切换到定义的报警信息画面,也可定义为功能按 键使用。 [←] 修改寄存数据时,左移被修改的数据位,即闪烁显示数字左移一位. [→] 修改寄存数据时,右移被修改的数据位,即闪烁显示数字右移一位. [↑] 将画面翻转到前页,前页画面号由用户在画面属性中指定(缺省值为当前画 面号-1) 如果在数据设定状态,被修改的数字位加1,递增范围:0—>9—>0 [↓] 将画面翻转到次页,次页画面号由用户在画面属性中指定(缺省值为当前画 面号+1) 如果在数据设定状态,被修改的数字位减1,递减范围:9—>0—>9 [SET] 按此键开始修改寄存数值,当前正在被修改的寄存窗反色显示,其中 被修改的位数闪烁显示。如果当前画面没有寄存设定窗部件,则执行一次空操作。在按[ENT]键之前再按一次[SET]键,则当前修改操作被取消, 并继续修改下一个数据寄存。 注意:SET键设定寄存具有最高优先级,不能被用户功能键定义所屏蔽。 [ENT] 用户使用了加密功能的情况下,按此键弹出口令设定画面。 在寄存设定状态下,将修改后的数据入寄存,并继续修改下一个数 据寄存。当前画面的最后一个寄存被修改后,退出修改寄存状态。 SET 详细信息: 显示屏:3.7"STN 液晶屏 分辨率:192 × 64 像素(支持4行×12中文字符显示) LCM类型:蓝屏 LCM显示效果:蓝屏为蓝底白字,配白光 LCM寿命:25±2℃、65±10%RH条件下50000小时以上 亮度:60 cd/m2 色彩:单色 对比度:电位调节 背光灯:长寿命LED白光 CPU:8位处理 存储 64KB Flash ROM 配方记忆体:无 通信端口:COM1: PC RS232 & PLC RS485/422 & PLC RS232 功能按键:20个可自由定义 实时时钟:无 打印端口:无 允许掉电:20ms以内 一般规格 供电电源:12~24 VDC ±10% <150mA @ 24VDC 抗干扰测试:电压1500Vp-p,脉冲周期1us,持续1s 耐压测试:500 V AC 1分钟 绝缘电阻:超过 10M 欧姆 @ 500V DC 防震测试:10 ~ 25 Hz (X、Y、Z方向 2G 30分钟) 防护等级:IP65 ( 前面板 ) 工作环境温度:0 ~ 50 ℃ 工作环境湿度:20 ~ 90 % RH (非冷凝) 储存温度:d-20℃ ~ 70℃ 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值