假设需要制造一个带有四个按钮和两个灯泡的盒子并具有以下功能:
⑴ 有四个按钮输入,分别称为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被按下时,闪烁重新开始。当故障被排除后闪烁停止,系统恢复正常状态。
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class Box { JFrame frame; JButton button1,button2,button3,button4; JLabel label1,label2; JPanel panel1,panel2; boolean off =false; public static void main(String args[]) { Box box=new Box(); box.go(); } void go(){ frame=new JFrame("盒子"); button1=new JButton("B1"); button2=new JButton("B2"); button3=new JButton("B3"); button4=new JButton("B4"); button1.setToolTipText("打开电源"); button2.setToolTipText("L1灯亮"); button3.setToolTipText("L2灯亮"); button4.setToolTipText("关闭电源"); label1=new JLabel(); label1.setBorder(BorderFactory.createLineBorder(Color.white,60)); label2=new JLabel(); label2.setBorder(BorderFactory.createLineBorder(Color.white,60)); JPanel panel1 =new JPanel(); JPanel panel2 =new JPanel(); panel1.add(label1,BorderLayout.WEST); panel1.add(label2,BorderLayout.EAST); panel2.add(button1); panel2.add(button2); panel2.add(button3); panel2.add(button4); Listener listener=new Listener(); button1.addActionListener(listener); button2.addActionListener(listener); button3.addActionListener(listener); button4.addActionListener(listener); frame.add(panel1,BorderLayout.NORTH); frame.add(panel2,BorderLayout.SOUTH); frame.setBackground(Color.BLACK); frame.setSize(350,250); frame.setDefaultCloseOperation(1); frame.setVisible(true); frame.setResizable(false); } class Listener implements ActionListener// 内部类,便于调用Box类中的成员变量on_off { public void actionPerformed(ActionEvent e) { String s=e.getActionCommand(); if (s.equals("B1")) { off =true; } if (off) { if (s.equals("B2")) { label1.setBorder(BorderFactory.createLineBorder(Color.yellow,60)); label2.setBorder(BorderFactory.createLineBorder(Color.white,60)); label1.setOpaque(true); label2.setOpaque(true); } if (s.equals("B3")) { label1.setBorder(BorderFactory.createLineBorder(Color.white,60)); label2.setBorder(BorderFactory.createLineBorder(Color.yellow,60)); label1.setOpaque(true); label2.setOpaque(true); } if (s.equals("B4")) { label1.setBorder(BorderFactory.createLineBorder(Color.white,60)); label2.setBorder(BorderFactory.createLineBorder(Color.white,60)); label1.setOpaque(true); label2.setOpaque(true); off=false; } } else { label1.setBorder(BorderFactory.createLineBorder(Color.white,60)); label2.setBorder(BorderFactory.createLineBorder(Color.white,60)); label1.setOpaque(true); label2.setOpaque(true); } } } }