求大神讲解java交通灯代码中画图部分,先3q啦

Russellll 发布于 2013/05/05 22:34
阅读 264
收藏 1

代码是

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Exp4_2 extends JFrame implements ItemListener {
  // 创建按钮
  private JRadioButton jRed, jYellow, jGreen;


  // 创建 button group
  private ButtonGroup bt = new ButtonGroup();


  // 创建交通灯面板
  private Light light = new Light();


  
  public static void main(String[] args) {
 Exp4_2 frame = new Exp4_2();
    frame.setTitle("模拟交通信号灯");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200, 200);
    frame.setVisible(true);
  }


 
  public Exp4_2() {
   


    //创建新面板
    JPanel p1 = new JPanel();
    p1.setLayout(new FlowLayout(FlowLayout.CENTER));
    //将交通灯面板添加到按钮面板
    p1.add(light);


    //创建按钮面板
    JPanel p2 = new JPanel();
    p2.setLayout(new FlowLayout());
    p2.add(jRed = new JRadioButton("Red"));
    p2.add(jYellow = new JRadioButton("Yellow"));
    p2.add(jGreen = new JRadioButton("Green"));


    
    bt.add(jRed);
    bt.add(jYellow);
    bt.add(jGreen);


    // 将两个面板添加到框架中
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(p1, BorderLayout.CENTER);
    getContentPane().add(p2, BorderLayout.SOUTH);


    // 注册监听器
    jRed.addItemListener(this);
    jYellow.addItemListener(this);
    jGreen.addItemListener(this);


  }


  //设置交通灯触发器
  public void itemStateChanged(ItemEvent e) {
    if (jRed.isSelected()) {
      light.turnOnRed(); 
    }
    if (jYellow.isSelected()) {
      light.turnOnYellow(); 
    }
    if (jGreen.isSelected()) {
      light.turnOnGreen(); 
    }
  }


//绘制交通灯面板类
 class Light extends JPanel {
    private boolean red;
    private boolean yellow;
    private boolean green;


   
    public Light() {
    }


   //设置红灯亮
    public void turnOnRed() {
      red = true;
      yellow = false;
      green = false;
      repaint();
    }


    //设置绿灯亮
    public void turnOnYellow() {
      red = false;
      yellow = true;
      green = false;
      repaint();
    }


       //  设置绿灯亮
    public void turnOnGreen() {
      red = false;
      yellow = false;
      green = true;
      repaint();
    }


   //绘制交通灯
    protected void paintComponent(Graphics g) {
      super.paintComponent(g);


      if (red) {
        g.setColor(Color.red);
        g.fillOval(10, 10, 20, 20);
        g.setColor(Color.black);
        g.drawOval(10, 35, 20, 20);
        g.drawOval(10, 60, 20, 20);
        g.drawRect(5, 5, 30, 80);
      }
      else if (yellow) {
        g.setColor(Color.yellow);
        g.fillOval(10, 35, 20, 20);
        g.setColor(Color.black);
        g.drawRect(5, 5, 30, 80);
        g.drawOval(10, 10, 20, 20);
        g.drawOval(10, 60, 20, 20);
      }
      else if (green) {
        g.setColor(Color.green);
        g.fillOval(10, 60, 20, 20);
        g.setColor(Color.black);
        g.drawRect(5, 5, 30, 80);
        g.drawOval(10, 10, 20, 20);
        g.drawOval(10, 35, 20, 20);
      }
      else {
        g.setColor(Color.black);
        g.drawRect(5, 5, 30, 80);
        g.drawOval(10, 10, 20, 20);
        g.drawOval(10, 35, 20, 20);
        g.drawOval(10, 60, 20, 20);
      }
    }


   
    public Dimension getPreferredSize() {
      return new Dimension(40, 90);
    }
  }
}


加载中
0
平原君
平原君
画交通灯的代码很简单呀,先是设置颜色,然后填充一个椭圆,这个椭圆就是灯头了。然后设置黑色,再画两个椭圆一个矩形,这个就是灯罩了。
Russellll
Russellll
好的,了解了,3q啊
平原君
平原君
回复 @青田 : 出来是圆是因为他把椭圆的高和宽都设置成了20,那当然就是个圆了,但我也不明白他为啥不直接调用填充圆形的函数,而已调用椭圆(我觉得可能是他用错了,当然也不能说错,只是可能效率不高而已)。
Russellll
Russellll
可是运行出来就是圆。。。
平原君
平原君
@青田 这个也就是个形状而已,也许他觉得椭圆更好看?
Russellll
Russellll
不是画圆嘛?为啥是椭圆?
0
开源无憾
开源无憾
一般看到用“这很简单啊”,“这个你都不知道”,“真二”,“傻逼”,“垃圾”等等类似的短语做开头的回复,我会立即关闭页面,这个也不例外。
返回顶部
顶部