用java编写交通信号灯

T^T单选框的课后练习……程序让用户从红,黄,绿三色灯中选择一种,当选择一个单选按钮后,相应的灯被打开,并且一次只能亮一种灯.程序开始时所有灯都不亮.我自己是这样想的,不... T^T单选框的课后练习……
程序让用户从红,黄,绿三色灯中选择一种,当选择一个单选按钮后,相应的灯被打开,并且一次只能亮一种灯.程序开始时所有灯都不亮.

我自己是这样想的,不过做不下去了:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Graphics;

public class TrafficLight extends JFrame{

public static void main(String[] args){

TrafficLight frame=new TrafficLight();
frame.setSize(500,200);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("TrafficLight");
frame.setVisible(true);
}

public TrafficLight(){
JPanel jpNewPanel=new JPanel();
add(jpNewPanel,BorderLayout.CENTER);
JPanel jpRadioButtons=new JPanel();
jpRadioButtons.setLayout(new GridLayout(1,3));
jpRadioButtons.add(jrbYellow=new JRadioButton("Yellow"));
jpRadioButtons.add(jrbGreen=new JRadioButton("Green"));
jpRadioButtons.add(jrbRed=new JRadioButton("Red"));
add(jpRadioButtons,BorderLayout.SOUTH);

ButtonGroup group=new ButtonGroup();
group.add(jrbYellow);
group.add(jrbGreen);
group.add(jrbRed);
}
class jpNewPanel extends JPanel{
protected void paintComponent(Graphics g){
g.drawRect(0,0,4,10);
g.drawOval(1,1,2,2);
g.drawOval(1,4,2,2);
g.drawOval(1,7,2,2);
}
}

jrbYellow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//写不来了
}
});
jrbGreen.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){

}
});
jrbRed.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){

}
});

}
越简单越好……我刚学不久
展开
 我来答
紫薇参星
科技发烧友

推荐于2017-11-25 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3615万
展开全部
按照你的要求编写的红绿灯程序,你看看吧,比较简单。
完整的程序如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Graphics;
public class TrafficLight extends JFrame{
JRadioButton jrbYellow,jrbGreen,jrbRed;
int flag=0;
jpNewPanel jpNewPanel;
public static void main(String[] args){
TrafficLight frame=new TrafficLight();
frame.setSize(500,200);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("TrafficLight");
frame.setVisible(true);
}
public TrafficLight(){
jpNewPanel=new jpNewPanel();
add(jpNewPanel,BorderLayout.CENTER);
JPanel jpRadioButtons=new JPanel();
jpRadioButtons.setLayout(new GridLayout(1,3));
jpRadioButtons.add(jrbYellow=new JRadioButton("Yellow"));
jpRadioButtons.add(jrbGreen=new JRadioButton("Green"));
jpRadioButtons.add(jrbRed=new JRadioButton("Red"));
add(jpRadioButtons,BorderLayout.SOUTH);
ButtonGroup group=new ButtonGroup();
group.add(jrbYellow);
group.add(jrbGreen);
group.add(jrbRed);

jrbYellow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
flag=2;
jpNewPanel.repaint();
}
});
jrbGreen.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
flag=1;
jpNewPanel.repaint();
}
});
jrbRed.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
flag=3;
jpNewPanel.repaint();
}
});
}
class jpNewPanel extends JPanel{
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawRect(0,0,40,100);
g.drawOval(10,10,20,20);
g.drawOval(10,40,20,20);
g.drawOval(10,70,20,20);
if(flag==1){
g.setColor(Color.GREEN);
g.fillOval(10, 70, 20, 20);
}
else if(flag==2){
g.setColor(Color.YELLOW);
g.fillOval(10, 40, 20, 20);
}
else if(flag==3){
g.setColor(Color.RED);
g.fillOval(10, 10, 20, 20);
}
}
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
全测科技
2024-12-19 广告
确实可以进行维修。如果您的频谱分析仪出现问题,并且还在保修期内,建议您联系原厂进行维修,这样可以享受到免费的维修服务。如果已经超过了保修期,也不用担心,市场上有许多专业的维修服务可以提供帮助。您可以在网络上搜索深圳全测科技有限公司,这是一家... 点击进入详情页
本回答由全测科技提供
百度网友7bfe765
2013-01-08
知道答主
回答量:39
采纳率:0%
帮助的人:20.7万
展开全部
package xuexi.util;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JRadioButton;

public class TrafficLight extends JFrame{
private static final long serialVersionUID = 1L;
JButton btnYellow,btnRed,btngreen;
JRadioButton yellow,red,green;

protected void initComponent(){
btnYellow = new JButton("黄灯");
btnRed = new JButton("红灯");
btngreen = new JButton("绿灯");
yellow = new JRadioButton("黄灯");
red = new JRadioButton("红灯");
green = new JRadioButton("绿灯");

btnRed.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
//设置红灯亮,其他灯不亮
yellow.setSelected(false);
red.setSelected(true);
green.setSelected(false);
}
});
btnYellow.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
//设置黄灯亮,其他灯不亮
yellow.setSelected(true);
red.setSelected(false);
green.setSelected(false);
}
});
btngreen.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
//设置绿灯亮,其他灯不亮
yellow.setSelected(false);
red.setSelected(false);
green.setSelected(true);
}
});

this.add(red);
this.add(yellow);
this.add(green);
this.add(btnRed);
this.add(btnYellow);
this.add(btngreen);
this.setTitle("交通灯演示");
this.setLayout(new FlowLayout());
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public static void main(String[] args) {
new TrafficLight().initComponent();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bd9006
2013-01-08 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
结构不对了。

灯在class jpNewPanel extends JPanel{里面判断哪一种讯号。

public class TrafficLight_01 extends JFrame{

public static void main(String[] args){
TrafficLight_01 frame=new TrafficLight_01();
frame.setSize(210, 400);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

private JMyPanel jMyPanel=new JMyPanel();
private Color colDef;
private JRadioButton jrbYellow, jrbGreen, jrbRed;
public TrafficLight_01(){
super("TrafficLight");
colDef=this.getBackground();
jMyPanel=new JMyPanel();
add(jMyPanel, BorderLayout.CENTER);
JPanel pnlRadioButtons=new JPanel();
pnlRadioButtons.setLayout(new GridLayout(1,3));
pnlRadioButtons.add(jrbYellow=new JRadioButton("Yellow"));
pnlRadioButtons.add(jrbGreen=new JRadioButton("Green"));
pnlRadioButtons.add(jrbRed=new JRadioButton("Red"));
add(pnlRadioButtons,BorderLayout.SOUTH);

ButtonGroup group=new ButtonGroup();
group.add(jrbYellow);
group.add(jrbGreen);
group.add(jrbRed);

jrbYellow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
jrbYellow.setBackground(Color.yellow);
jrbGreen.setBackground(colDef);
jrbRed.setBackground(colDef);

jMyPanel.setCol(Color.yellow);
}
});
jrbGreen.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
jrbYellow.setBackground(colDef);
jrbGreen.setBackground(Color.green);
jrbRed.setBackground(colDef);

jMyPanel.setCol(Color.green);
}
});
jrbRed.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
jrbYellow.setBackground(colDef);
jrbGreen.setBackground(colDef);
jrbRed.setBackground(Color.red);

jMyPanel.setCol(Color.red);
}
});
}
class JMyPanel extends JPanel{
private Color col;
public void setCol(Color col){
this.col=col;
repaint();
}

private static final int x_offset=50;
public void paint(Graphics g){
super.paint(g);
int w=getWidth();
int h=getHeight();
g.drawRect(0,0, w, h);

if(Color.yellow.equals(col)){
g.setColor(col);
g.fillOval(x_offset, 10, 60, 60);
}else{
g.setColor(Color.black);
g.fillOval(x_offset, 10, 59, 59);
g.setColor(Color.yellow);
g.drawOval(x_offset, 10, 60, 60);
}

if(Color.green.equals(col)){
g.setColor(col);
g.fillOval(x_offset, 80, 60, 60);
}else{
g.setColor(Color.black);
g.fillOval(x_offset, 80, 59, 59);
g.setColor(Color.green);
g.drawOval(x_offset, 80, 60, 60);
}

if(Color.red.equals(col)){
g.setColor(col);
g.fillOval(x_offset, 160, 60, 60);
}else{
g.setColor(Color.black);
g.fillOval(x_offset, 160, 59, 59);
g.setColor(Color.red);
g.drawOval(x_offset, 160, 60, 60);
}

}
}

}
追问
你好 谢谢你的解答 我还有几个疑问 希望能够得到您的解答:
(1)JMyPanel是JPanel的一种吗?
(2)“private JMyPanel jMyPanel=new JMyPanel();”这句和“jMyPanel=new JMyPanel();”是一样的吗?一样的话为什么要定义两遍?
谢谢
追答
这个界面比较好看一点。

1、JMyPanel 继承JPanel的类,你本来写了一个了。

2、是一样的,类变量中的,可以删除=及后面的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
婷婷petrel
2017-11-20
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
package exercise_16;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Exercise_16_3 extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
//创建单选按钮
RadioButton red = new RadioButton("Red");
RadioButton yellow = new RadioButton("Yellow");
RadioButton green = new RadioButton("Green");

ToggleGroup group = new ToggleGroup();
red.setToggleGroup(group);
yellow.setToggleGroup(group);
green.setToggleGroup(group);

HBox hBox = new HBox();
hBox.getChildren().addAll(red,yellow,green);
hBox.setSpacing(10);

Rectangle rectangle = new Rectangle(120,50,50,150);
rectangle.setFill(Color.WHITE);
rectangle.setStroke(Color.BLACK);

Circle c1 = new Circle(145,75,20);
c1.setFill(Color.WHITE);
c1.setStroke(Color.BLACK);
Circle c2 = new Circle(145,120,20);
c2.setFill(Color.WHITE);
c2.setStroke(Color.BLACK);
Circle c3 = new Circle(145,165,20);
c3.setFill(Color.WHITE);
c3.setStroke(Color.BLACK);
Pane pane1 = new Pane();
pane1.getChildren().addAll(rectangle,c1,c2,c3);

BorderPane pane = new BorderPane();
pane.setBottom(hBox);
pane.setCenter(pane1);

//处理事件
//设置单选框动作
red.setOnAction(e->{
if(red.isSelected()) {
c1.setFill(Color.RED);
}
});
green.setOnAction(e->{
if(green.isSelected()) {
c2.setFill(Color.GREEN);
}
});

yellow.setOnAction(e->{
if(yellow.isSelected()) {
c3.setFill(Color.YELLOW);
}
});

// 创建场景且把面板加到场景中
Scene scene = new Scene(pane,300,250);
primaryStage.setTitle("MediaDemo ");
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
// 用于启动一个独立的JavaFx应用
Application.launch(args);
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式