2017-02-13 6 views
0

質問は、信号を描画し、プッシュボタンを使用してライトを変更するアプリケーションを設計して実装することです。 JPanelクラスから描画面を派生させ、別のパネルを使用して描画面とボタンを整理します。JPanelクラスを使用してトラフィックライトを作成するプログラムを作成して実装します。

私はそれを試してみましたが、それを実行するクラスが出てきましたが、その主な方法を実行する方法が正確にはわかりません。ここで

はコードです:

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

public class TrafficLight extends JPanel implements ActionListener {

private Button lightRed, lightYellow, lightGreen; 
private JPanel panel1; 
private boolean lightRedClicked = false, lightYellowClicked = false, lightGreenClicked = false; 

public void init() { 

    setLayout(new BorderLayout()); 
    panel1 = new JPanel(); 

    lightGreen = new Button("Go"); 
    lightYellow = new Button("Wait"); 
    lightRed = new Button("Stop"); 
    panel1.add(lightRed); 
    panel1.add(lightYellow); 
    panel1.add(lightGreen); 

    add(panel1, BorderLayout.NORTH); 
} 
public void paint(Graphics g){ 
    setBackground(Color.cyan); 
    g.setColor(Color.black); 
    g.fillRect(260,50,80,160); 
    g.setColor(Color.black); 
    g.fillRect(140,50,80,160); 

    if(lightRedClicked == true){   
     g.setColor(Color.red); 
     g.fillOval(280,60,40,40); 
     g.setColor(Color.black); 
     g.fillOval(280,110,40,40); 
     g.fillOval(280,160,40,40); 
     lightRedClicked = false; 
    } 
    if(lightYellowClicked == true) { 
     g.setColor(Color.yellow); 
     g.fillOval(280,110,40,40); 
     g.setColor(Color.black); 
     g.fillOval(280,60,40,40); 
     g.fillOval(280,160,40,40); 
     lightYellowClicked = false; 
    } 

    if(lightGreenClicked == true) { 
     g.setColor(Color.green); 
     g.fillOval(280,160,40,40); 
     g.setColor(Color.black); 
     g.fillOval(280,110,40,40); 
     g.fillOval(280,60,40,40); 
     lightGreenClicked = false; 
    } 
} 
public void actionPerformed(ActionEvent swicth) { 
    if(swicth.getSource() == lightGreen){ 
    lightGreenClicked = true; 
    repaint(); 
    } 
    if(swicth.getSource() == lightYellow){ 
    lightYellowClicked = true; 
    repaint(); 
    } 
    if(swicth.getSource() == lightRed){ 
    lightRedClicked = true; 
    repaint(); 
    } 
} 

}

+1

を試してみて、そしてそこに作成しますJFrameを作成し、このTrafを追加するそれにficLightを表示し、JFrameを表示します。 – MeBigFatGuy

+1

まず、JPanelのpaint()メソッドをオーバーライドしないでください。代わりにpaintComponent()をオーバーライドしてください。 paintComponentメソッドは、3つの円を縦線で描画する必要があります。指示は、赤、黄、または緑の円をクリックして変更するのではなく、単一のボタンを使用してどの光(円)が最も明るいかを変更すると言います。 – FredK

+1

クラスは、色を取り、ライトを描画する必要があります。おそらく、パネルの背景または前景のいずれかのプロパティを使用するだけで、描画の仕方が決まる「オン」状態になります。おそらくこのクラスの3つのインスタンスを作成し、それらを追加してレイアウトし、どちらがアクティブであるかを制御する2番目のクラスを持つでしょう。 – MadProgrammer

答えて

1

あなたは、標準のmainメソッドを作成する必要があり、この

 public class JavaApplication5 { 

    public static void main(String[] args) { 
JFrame f = new JFrame("Traffic Light"); 
f.add(new TrafficLight()); 
f.setSize(500, 500); 
f.setVisible(true); 
    } 
} 

class TrafficLight extends JPanel implements ActionListener { 

    private Button lightRed, lightYellow, lightGreen; 
private JPanel panel1; 
private boolean lightRedClicked = false, lightYellowClicked = false, lightGreenClicked = false; 
public TrafficLight(){ 
    setLayout(new BorderLayout()); 
    panel1 = new JPanel(); 

    lightGreen = new Button("Go"); 
    lightYellow = new Button("Wait"); 
    lightRed = new Button("Stop"); 
    panel1.add(lightRed); 
    panel1.add(lightYellow); 
    panel1.add(lightGreen); 

    add(panel1, BorderLayout.NORTH); 
    lightRed.addActionListener(this); 
    lightGreen.addActionListener(this); 
     lightYellow.addActionListener(this); 
} 
public void init() { 


} 
public void paint(Graphics g){ 
    setBackground(Color.cyan); 
    g.setColor(Color.black); 
    g.fillRect(260,50,80,160); 
    g.setColor(new Color(255, 150, 150));  //light red 
    g.fillOval(280,60,40,40); 
    g.setColor(new Color(255, 255, 200));  //light yellow 
    g.fillOval(280,110,40,40); 
    g.setColor(new Color(150, 200, 150));  //light green 
    g.fillOval(280,160,40,40); 

    if(lightRedClicked == true){   
     g.setColor(Color.red); 
     g.fillOval(280,60,40,40); 
     lightRedClicked = false; 
    } 
    if(lightYellowClicked == true) { 
     g.setColor(Color.yellow); 
     g.fillOval(280,110,40,40); 
     lightYellowClicked = false; 
    } 

    if(lightGreenClicked == true) { 
     g.setColor(Color.green); 
     g.fillOval(280,160,40,40); 
     lightGreenClicked = false; 
    } 
} 
public void actionPerformed(ActionEvent swicth) { 
    if(swicth.getSource() == lightGreen){ 
    lightGreenClicked = true; 
    repaint(); 
    } 
    if(swicth.getSource() == lightYellow){ 
    lightYellowClicked = true; 
    repaint(); 
    } 
    if(swicth.getSource() == lightRed){ 
    lightRedClicked = true; 
    repaint(); 
    } 
} 


} 
+0

OPsコードのすべての問題を修正しますか?彼らはそれ以上の質問をしないようにする; P – MadProgrammer

関連する問題