一波大作业临近~图像处理~网管。。赶了一晚上把这个写出来了~

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class Bulb extends JFrame {private final int INTER_SECOND = 500; // 间隔时间private BulbButton b1 = new BulbButton("B1");private BulbButton b2 = new BulbButton("B2");private BulbButton b3 = new BulbButton("B3");private BulbButton b4 = new BulbButton("B4");private BulbLight l1 = new BulbLight(1);private BulbLight l2 = new BulbLight(2);private JButton bb1 = new BuldStateButton(l1);private JButton bb2 = new BuldStateButton(l2);private JLabel state = new JLabel("关闭");private CheckLightThread thread;public Bulb() {this.setTitle("灯泡模拟");this.setSize(300, 200);this.setLayout(new GridLayout(4, 1));this.add(new JPanel() {{this.setLayout(new FlowLayout(FlowLayout.CENTER));this.add(new JLabel("电源状态:"));this.add(state);}});this.add(new JPanel() {{this.setLayout(new FlowLayout(FlowLayout.CENTER));this.add(l1);this.add(l2);}});this.add(new JPanel() {{this.setLayout(new FlowLayout(FlowLayout.CENTER));this.add(b1);this.add(b2);this.add(b3);this.add(b4);}});this.add(new JPanel() {{this.setLayout(new FlowLayout(FlowLayout.CENTER));this.add(bb1);this.add(bb2);}});setButtons();this.setVisible(true);}private void setButtons() {b2.setEnabled(false);b3.setEnabled(false);b4.setSelected(true);b1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {b1.changeState();if (b1.isSelected()) {b4.setSelected(false);b2.setEnabled(true);b3.setEnabled(true);} else {b2.setSelected(false);b3.setSelected(false);b4.setSelected(true);b2.setEnabled(false);b3.setEnabled(false);}changeSystemState();}});b2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (!b1.isSelected() && b4.isSelected())return; // 在电源关闭状态下,B2和B3按钮不起作用
                b2.changeState();if (b2.getCount() > b3.getCount()) { // 如果B2被按下的次数比B3被按下的次数多,L1亮l1.change(true);l2.change(false);}}});b3.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (!b1.isSelected() && b4.isSelected())return; // 在电源关闭状态下,B2和B3按钮不起作用
                b3.changeState();if (b3.getCount() >= b2.getCount()) { // 如果B2被按下的次数比B3被按下的次数少,L2亮l1.change(false);l2.change(true);}}});b4.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {b4.changeState();if (b4.isSelected()) {b1.setSelected(false);b2.setSelected(false);b3.setSelected(false);b2.setEnabled(false);b3.setEnabled(false);} else {b1.setSelected(true);b2.setEnabled(true);b3.setEnabled(true);}changeSystemState();}});}private void changeSystemState() {if (!b1.isSelected() && b4.isSelected()) { // 在电源关闭状态下,灯应不亮state.setText("关闭");l1.change(false);l2.change(false);thread.pause();}if (b1.isSelected() && !b4.isSelected()) { // 从最近一次电源打开状态算起state.setText("开启");b2.clearCount();b3.clearCount();thread = new CheckLightThread();thread.start();}}public static void main(String[] args) {new Bulb();}private class BulbButton extends JToggleButton {private int count = 0;public BulbButton(String text) {super(text);}public void changeState() {if (isSelected()) {++count;}}public void clearCount() {count = 0;}public int getCount() {return count;}}private class BulbLight extends JPanel {private int id;private boolean bad;private boolean lightState;private JLabel label;private JLabel state = new JLabel("【暗】");private JLabel state2 = new JLabel("-正常");public BulbLight(int id) {this.id = id;label = new JLabel("灯泡" + id);this.add(label);this.add(state);this.add(state2);}public int getId() {return id;}public void light() {this.state.setText("【"+ ("【暗】".equals(this.state.getText()) ? "亮" : "暗") + "】");}public void change(boolean light) {if (bad)return;lightState = light;this.state.setText("【" + (lightState ? "亮" : "暗") + "】");}public boolean isBad() {return bad;}public void setState(boolean bad) {this.bad = bad;state2.setText((bad ? "-故障" : "-正常"));if (bad) {this.state.setText("【暗】");} else {this.state.setText("【" + (lightState ? "亮" : "暗") + "】");}}}private class BuldStateButton extends JButton implements ActionListener {private BulbLight light;public BuldStateButton(BulbLight light) {super("破坏灯泡" + light.getId());this.light = light;this.addActionListener(this);}public void actionPerformed(ActionEvent e) {if (("破坏灯泡" + light.getId()).equals(this.getActionCommand())) {this.setText("修复灯泡" + light.getId());light.setState(true);} else {this.setText("破坏灯泡" + light.getId());light.setState(false);}}}private class CheckLightThread extends Thread {private boolean runFlag = true;public void pause() {this.runFlag = false;}public void run() {while (runFlag) {try {if (l1.isBad() && !l2.isBad()) {l2.light();}if (!l1.isBad() && l2.isBad()) {l1.light();}sleep(INTER_SECOND);} catch (Exception e) {System.out.println(e.getMessage());}}}}
}

运行结果:

转载于:https://www.cnblogs.com/zw-blogs/p/6021316.html

作业四:灯泡异常问题相关推荐

  1. 计算机术语所见即所得,计算机应用基础作业四(16页)-原创力文档

    <计算机应用基础>作业四 windows操作系统 填空题: 在windows98中,要运行"记事本",可以选择"开始"∣" "∣ ...

  2. 软件调试学习笔记(四)—— 异常的处理流程

    软件调试学习笔记(四)-- 异常的处理流程 要点回顾 异常的处理流程 实验1:理解调试器与异常的关系 未处理异常:最后一道防线 实验2:理解UnhandledExceptionFilter执行流程 实 ...

  3. 深蓝学院《从零开始手写VIO》作业四

    深蓝学院<从零开始手写VIO>作业四 深蓝学院<从零开始手写VIO>作业四 1. 信息矩阵分析 2. Bundle Adjustment信息矩阵的计算 深蓝学院<从零开始 ...

  4. 2017《面向对象程序设计》作业四

    2017<面向对象程序设计>作业四 林燊 031602325 https://www.cnblogs.com/linshen/ github链接:https://github.com/Tr ...

  5. 机器学习基石-作业四-代码部分

    这次的作业内容主要就是对带正则化项的线性规划的闭式解做各种操作:选择.把数据分成训练集和交叉验证.k-折交叉验证.完全套公式就可以了,这里唯一的一个问题就是偏移量参不参加正则化: 在林老师的课程中,最 ...

  6. 第二十四章 异常和错误处理 1异常

    // 第二十四章 异常和错误处理 //1异常 /*#include <iostream> using namespace std; class wrong{}; void error() ...

  7. 作业计算机组成与原理,课程计算机组成原理与汇编语言作业四

    课程计算机组成原理与汇编语言作业四 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 南京广播电视大学 开放教育计算机应用专业(专科)学 ...

  8. 国开计算机网络 形考4,国开电大计算机网络(本)形考作业四参考答

    国开电大计算机网络(本)形考作业二参考答案_韩语学习_外语学习_教育专区 null 题目1.局域网的分类,按网络的拓扑结构划分,可分为星型.( )和环型局域网. A. 树型 B. 网状型 C. 网格型 ...

  9. 大数据技术原理与应用作业四

    大数据技术原理与应用作业四 1. 试述在Hadoop体系架构中HBase与其他组成部分的相互关系. HBase利用Hadoop MapReduce来处理HBase中的海量数据,实现高性能计算: 利用Z ...

  10. 计算机基础16秋在线作业,答案计算机基础16秋在线作业四

    答案计算机基础16秋在线作业四+ v7 F& F6 X" z$ K+ k3 l- W 一.单选题: * ^, J3 R- H% Q! K, ^1.与录音质量无关的参数是(    ). ...

最新文章

  1. 小型星形网络结构设计示例
  2. 解决403跨域问题之——————JSONP
  3. php imap 安装_linux 下安装PHP的IMAP扩展实现邮件收发
  4. JSP简单练习-上传文件
  5. ​再见 Seaborn!Altair 数据可视化已超神
  6. 【Python】最新Python学习路线(完整详细版,含整套教程)
  7. JVM参数调优详细过程
  8. R语言快速学习第一部分(有其他语言基础)
  9. Android(java)学习笔记114:Service生命周期
  10. 关于如果减少勒索病毒的侵扰:
  11. mysql系列之InnoDB存储引擎结构详解
  12. python写入文件取消自动换行
  13. 台大Machine Learning 2017Fall HW0字数统计和图片淡化 解答
  14. Pdfarranger:开源的 PDF 分割和合并工具
  15. 纸的大小图解_手工折纸大全图解 不一定是A4大小)一般都有7
  16. 国内新锐买手品牌BSiEE 本涩启动第三届品牌代言人招募活动
  17. ERROR: torch-1.6.0+cu101-cp37-cp37m-win_amd64.whl is not a supported wheel on this platform.
  18. conda安装GPU版pytorch,结果却是cpu版本[找到问题根源,从容解决]
  19. UNP-基本TCP编程-2(复用技术)
  20. 高校间计算机专业交流研讨会,第七届全国高校计算机网络教学暨网络工程专业建设研讨会...

热门文章

  1. neo4j 约束(CONSTRAINT)
  2. html 单行文本(input text)
  3. 14 exec/fork/wait cycles for Process Management
  4. TensorFlow DCNN
  5. C++ 对比 C语言
  6. sqlalchemy create engine
  7. Pandas Timedelta对象
  8. 项目安装使用uuid_在uniapp中使用fingerprint2实现游客设备标识
  9. 组策略之统一修改域中计算机的本地管理员账户和密码和受限制组
  10. 阿里云:Table Store(OTS) Writer