0%

叶庆生的上机作业01

引言

软件工程与方法学的坑爹老师要求的作业,本来以为写个控制台的程序就好了,结果不知道是谁先开始了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
2
3
4
5
6
7
8
9
10
11
12
public class Learn{
public static void Main(String args[]){
Timer timer = new Timer();
timer.schedule(new MyTask(), 1000, 2000);
}
}

public class MyTask extends TimerTask{
public void run(){
//你想执行的部分
}
}

内嵌类

因为要操作界面,又要执行MyTask这个类,所以需要在fxml的Controller中内嵌一个MyTask类,其实跟一般的类也没什么区别,只是对外部隐藏。

1
2
3
4
5
6
7
8
9
public class A{
private class B{

}
}

public class C{

}

对于类C,是不可以使用类B的。

任务源代码

git@oschina:点击查看