引言
软件工程与方法学的坑爹老师要求的作业,本来以为写个控制台的程序就好了,结果不知道是谁先开始了GUI的编程,于是,这个坑爹的作业就这样开始了。虽然比较坑,但还是学了一些东西的。
任务要求
假设需要制造一个带有四个按钮和两个灯泡的盒子并具有以下功能:
- 有四个按钮输入,分别称为B1,B2,B3和B4;
- 有两个灯泡作为输出,分别称为L1和L2;
- B1是打开电源的按钮;
- B4是关闭电源的按钮;
- B2和B3 是操作按钮;
- 在B1被按下后及B4被按下前,系统应称为电源打开状态;
- 在B4被按下后及B1被按下前,系统应称为电源关闭状态;
- 在电源关闭状态下,B2和B3按钮不起作用;
- 在电源关闭状态下,灯应不亮;
- 从最近一次电源打开状态算起,如果B2被按下的次数比B3被按下的次数多,L1亮,否则L2亮。
- 任何时候都不能有一个以上的灯泡亮;
- 如果其中的一个灯泡出现故障,另一个灯泡应以2秒钟的间隔闪烁,而不管B2和B3的操作过程。当B4按下时,闪烁停止;当B1被按下时,闪烁重新开始。当故障被排除后闪烁停止,系统恢复正常状态。
学到的东西
JavaFx
第一次接触Java的GUI编程,百度了一下,发现了这个东西,具体看了一下,感觉跟.Net很像,界面标记语言是fxml,.Net是xmal,标记的格式也差不多。只是控件和属性有些不同。
Timer
由于任务要求一个灯泡损坏后,另一个要以2秒钟的间隔闪烁,所以就需要一个线程来处理这个事情,于是就找到了Timer这个Class,通过调用Timer.schedule()这个函数启动一个TimerTask的Class。
1 | public class Learn{ |
内嵌类
因为要操作界面,又要执行MyTask这个类,所以需要在fxml的Controller中内嵌一个MyTask类,其实跟一般的类也没什么区别,只是对外部隐藏。
1 | public class A{ |
对于类C,是不可以使用类B的。
任务源代码
git@oschina:点击查看