Ask Experts Questions for FREE Help !
Ask
    Radwa89's Avatar
    Radwa89 Posts: 1, Reputation: 1
    New Member
     
    #1

    Dec 6, 2013, 06:07 PM
    Graphics color in java applet
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.GridLayout;
    import java.awt.Polygon;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.BorderFactory;
    import javax.swing.JApplet;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.Timer;


    public class Racing extends JApplet
    implements ActionListener

    {
    private JTextField jtfRedCarSpeed = new JTextField(4);
    private JTextField jtfGreenCarSpeed = new JTextField(4);
    private Racing.RaceCar RedCar = new Racing.RaceCar();
    private Racing.RaceCar GreenCar = new Racing.RaceCar();

    public Racing() {
    JPanel panel1 = new JPanel();
    panel1.add(new JLabel("David's Car : "));
    panel1.add(this.jtfRedCarSpeed);
    panel1.add(new JLabel("Radwa's Car : "));
    panel1.add(this.jtfGreenCarSpeed);

    JPanel panel2 = new JPanel(new GridLayout(4, 1));
    panel2.add(this.RedCar);
    panel2.add(this.GreenCar);


    add(panel1, "North");
    add(panel2, "Center");

    this.jtfRedCarSpeed.addActionListener(this);
    this.jtfGreenCarSpeed.addActionListener(this);

    }

    public static void main(String[] args)
    {
    JFrame frame = new JFrame();
    JApplet applet = new Racing();
    frame.add(applet);
    frame.setTitle("Car Racing");
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(3);
    frame.setSize(400, 200);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
    if (e.getSource() == this.jtfRedCarSpeed) {
    this.RedCar.setSpeed(Integer.parseInt(this.jtfRedC arSpeed.getText()));
    }
    else if (e.getSource() == this.jtfGreenCarSpeed)
    {
    this.GreenCar.setSpeed(Integer.parseInt(this.jtfGr eenCarSpeed.getText()));
    }
    }

    class RaceCar extends JPanel
    implements ActionListener
    {

    private int RBase = 0;
    private int GBase = 0;

    private Timer timer = new Timer(10, this);

    public RaceCar() {
    setBorder(BorderFactory.createLineBorder(Color.BLA CK));

    this.timer.start();
    }

    public void actionPerformed(ActionEvent e)
    {
    repaint();
    }

    public void setSpeed(int speed) {
    this.timer.setDelay(speed);
    }

    public void paintComponent(Graphics g)
    {
    super.paintComponent(g);

    int RedCar = getHeight();
    if (this.RBase > getWidth()) {
    this.RBase = -20;
    }
    else {
    this.RBase += 1;
    }


    int GreenCar = getHeight();
    if (this.GBase > getWidth()) {
    this.GBase = -20;
    }
    else {
    this.GBase += 1;
    }


    //red color

    g.setColor(Color.red);
    g.fillOval(this.RBase + 10, RedCar - 10, 10, 10);
    g.fillOval(this.RBase + 30, RedCar - 10, 10, 10);

    g.setColor(Color.red);
    g.fillRect(this.RBase, RedCar - 20, 50, 10);

    g.setColor(Color.red);
    Polygon polygon1 = new Polygon();
    polygon1.addPoint(this.RBase + 10, RedCar - 20);
    polygon1.addPoint(this.RBase + 20, RedCar - 30);
    polygon1.addPoint(this.RBase + 30, RedCar - 30);
    polygon1.addPoint(this.RBase + 40, RedCar - 20);
    g.fillPolygon(polygon1);

    //green car

    g.setColor(Color.green);
    g.fillOval(this.GBase + 10, GreenCar - 10, 10, 10);
    g.fillOval(this.GBase + 30, GreenCar - 10, 10, 10);

    g.setColor(Color.green);
    g.fillRect(this.GBase, GreenCar - 20, 50, 10);


    g.setColor(Color.green);
    Polygon polygon2 = new Polygon();
    polygon2.addPoint(this.GBase + 10, GreenCar - 20);
    polygon2.addPoint(this.GBase + 20, GreenCar - 30);
    polygon2.addPoint(this.GBase + 30, GreenCar - 30);
    polygon2.addPoint(this.GBase + 40, GreenCar - 20);
    g.fillPolygon(polygon2);

    }
    }
    }

    I am trying to change one of the cars color but doesn't seem like it's working and I can't figure out the problem
    Scleros's Avatar
    Scleros Posts: 2,165, Reputation: 262
    Hardware Expert
     
    #2

    Dec 8, 2013, 04:14 PM
    The problem is paintComponent() does not distinguish which car is being painted. The code is painting a car red and then immediately painting it green. Two race cars are declared. Think object oriented-ly. Why not make the color of the car a member variable of the race car class and pass the color the car should be when declaring it? Then paintComponent() can generically process all the cars the same way whether there is one car or a hundred and without needing to figure out which car it is painting simplifying the code.

    Modified code follows below. Key modifications are in red.
    Code:
    /*
    ** Compiled using Oracle JDK 1.7.0_45
    */
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.GridLayout;
    import java.awt.Polygon;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.BorderFactory;
    import javax.swing.JApplet;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.Timer;
    
    
    public class Racing extends JApplet implements ActionListener {
    	private JTextField jtfRedCarSpeed = new JTextField(4);
    	private JTextField jtfGreenCarSpeed = new JTextField(4);
    
    	private Racing.RaceCar RedCar = new Racing.RaceCar(Color.RED);
    	private Racing.RaceCar GreenCar = new Racing.RaceCar(Color.GREEN);
    
    	public Racing() {
    		JPanel panel1 = new JPanel();
    		panel1.add(new JLabel("David's Car : "));
    		panel1.add(jtfRedCarSpeed);
    		panel1.add(new JLabel("Radwa's Car : "));
    		panel1.add(jtfGreenCarSpeed);
    
    		JPanel panel2 = new JPanel(new GridLayout(4, 1));
    		panel2.add(RedCar);
    		panel2.add(GreenCar);
    
    		add(panel1, "North");
    		add(panel2, "Center");
    
    		jtfRedCarSpeed.addActionListener(this);
    		jtfGreenCarSpeed.addActionListener(this);
    	}
    
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		JApplet applet = new Racing();
    		frame.add(applet);
    		frame.setTitle("Car Racing");
    		frame.setLocationRelativeTo(null);
    		frame.setDefaultCloseOperation(3);
    		frame.setSize(400, 200);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    	}
    
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource() == jtfRedCarSpeed) {
    			RedCar.setSpeed(Integer.parseInt(jtfRedCarSpeed.getText()));
    		}
    		else if (e.getSource() == jtfGreenCarSpeed) {
    			GreenCar.setSpeed(Integer.parseInt(jtfGreenCarSpeed.getText()));
    		}
    	}
    
    	class RaceCar extends JPanel implements ActionListener {
    		private int xBase = 0;
    		private Color PaintColor = Color.BLACK;
    		private Timer timer = new Timer(10, this);
    
    		public RaceCar(Color CarColor) {
    			setBorder(BorderFactory.createLineBorder(Color.BLACK));
    
    			PaintColor = CarColor;
    
    			timer.start();
    		}
    
    		public void actionPerformed(ActionEvent e) {
    			repaint();
    		}
    
    		public void setSpeed(int speed) {
    			timer.setDelay(speed);
    		}
    
    		public void paintComponent(Graphics g) {
    			super.paintComponent(g);
    
    			int yBase = getHeight();
    			if (xBase > getWidth()) {
    				xBase = -20;
    			}
    			else {
    				xBase += 1;
    			}
    
    
    			// Paint car...
    			g.setColor(PaintColor);
    			
    			// ...Wheels
    			g.fillOval(xBase + 10, yBase - 10, 10, 10);
    			g.fillOval(xBase + 30, yBase - 10, 10, 10);
    
    			// ...Body
    			g.fillRect(xBase, yBase - 20, 50, 10);
    
    			// ...Roof
    			Polygon polygon1 = new Polygon();
    			polygon1.addPoint(xBase + 10, yBase - 20);
    			polygon1.addPoint(xBase + 20, yBase - 30);
    			polygon1.addPoint(xBase + 30, yBase - 30);
    			polygon1.addPoint(xBase + 40, yBase - 20);
    			g.fillPolygon(polygon1);
    		}
    	}
    }
    Attached Images
     

Not your question? Ask your question View similar questions

 

Question Tools Search this Question
Search this Question:

Advanced Search

Add your answer here.


Check out some similar questions!

Ask queries regarding java applet [ 1 Answers ]

//The code is as follows,I want that whatever data is there in text field T1 and T2 get subtracted and comes in T3 after we press the button... /// import java.io.*; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.awt.Font; public class abc extends Applet...

Authentication in Java Applet [ 0 Answers ]

I want to make a Java applet, which will on load authenticate a URL and show the next graphic which we have mentioned. I am doing the authentication in using "Authenticator.setDefault(new MyAuthenticator())" It works fine alone but when I use it in Java applet it gives me an exception give...

Java Applet upgrade [ 1 Answers ]

I downloaded the java 1_05_09 but in the advanced menu of IE tools it says requires restart... I have restarted with no luck. Anyone know anything about it?


View more questions Search