1 import java.awt.BorderLayout; 2 import java.awt.Color; 3 import java.awt.Graphics; 4 import java.awt.GridLayout; 5 import java.awt.event.ActionEvent; 6 import java.awt.event.ActionListener; 7 8 import javax.swing.*; 9 10 public class Test_17_3 extends JFrame{ 11 private final int YSTART = 20; 12 private final int VGAP = 2; 13 private final int XGAP = 2; 14 private Color myColor = Color.BLACK; 15 16 ButtonGroup group = new ButtonGroup(); 17 JRadioButton jrb1 = new JRadioButton("red"); 18 JRadioButton jrb2 = new JRadioButton("blue"); 19 JRadioButton jrb3 = new JRadioButton("yellow"); 20 21 trafficPanel tP = new trafficPanel(); 22 public Test_17_3(){ 23 24 JPanel jgButtons = new JPanel(); 25 jgButtons.setLayout(new GridLayout(1,3)); 26 jgButtons.add(jrb1); 27 jgButtons.add(jrb2); 28 jgButtons.add(jrb3); 29 30 group.add(jrb1); 31 group.add(jrb2); 32 group.add(jrb3); 33 34 setLayout(new BorderLayout()); 35 add(jgButtons,BorderLayout.SOUTH); 36 add(tP,BorderLayout.CENTER); 37 38 jrb1.addActionListener(new ActionListener(){ 39 40 @Override 41 public void actionPerformed(ActionEvent arg0) { 42 // TODO Auto-generated method stub 43 myColor = Color.RED; 44 tP.setColor = true; 45 repaint(); 46 } 47 48 }); 49 jrb2.addActionListener(new ActionListener(){ 50 51 @Override 52 public void actionPerformed(ActionEvent arg0) { 53 // TODO Auto-generated method stub 54 myColor = Color.BLUE; 55 tP.setColor = true; 56 repaint(); 57 } 58 59 }); 60 jrb3.addActionListener(new ActionListener(){ 61 62 @Override 63 public void actionPerformed(ActionEvent arg0) { 64 // TODO Auto-generated method stub 65 myColor = Color.YELLOW; 66 tP.setColor = true; 67 repaint(); 68 } 69 70 }); 71 } 72 public static void main(String[] args) { 73 // TODO Auto-generated method stub 74 Test_17_3 frame = new Test_17_3(); 75 frame.setTitle("Test_17_3"); 76 frame.setSize(300,200); 77 frame.setLocationRelativeTo(null); 78 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 79 frame.setVisible(true); 80 } 81 82 83 class trafficPanel extends JPanel{ 84 public boolean setColor = false; 85 86 protected void paintComponent(Graphics g){ 87 int xCenter = getWidth()/2; 88 int yCenter = getHeight()/2; 89 90 int radius = getHeight() /6 - 5; 91 /** draw steady shape */ 92 //draw rect 93 g.drawRect(xCenter -radius,YSTART, 2*radius,getHeight()-20 -VGAP); 94 //draw three circles 95 g.drawOval(xCenter - radius + XGAP, YSTART + VGAP, 2*radius -2*XGAP , 2*radius-2*XGAP); 96 g.drawOval(xCenter - radius + XGAP, YSTART + 2*radius + 2*VGAP,2*radius -2*XGAP , 2*radius-2*XGAP); 97 g.drawOval(xCenter - radius + XGAP, YSTART + 4*radius + 3*VGAP,2*radius -2*XGAP , 2*radius-2*XGAP ); 98 99 if(setColor) 100 { 101 if(myColor == Color.RED) 102 {g.setColor(Color.RED); g.fillOval(xCenter - radius + XGAP, YSTART + VGAP, 2*radius -2*XGAP , 2*radius-2*XGAP);} 103 else if(myColor == Color.BLUE) 104 {g.setColor(Color.BLUE); g.fillOval(xCenter - radius + XGAP, YSTART + 2*radius + 2*VGAP,2*radius -2*XGAP , 2*radius-2*XGAP);} 105 else 106 {g.setColor(Color.YELLOW);g.fillOval(xCenter - radius + XGAP, YSTART + 4*radius + 3*VGAP,2*radius -2*XGAP , 2*radius-2*XGAP );} 107 } 108 } 109 } 110 }