Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 10th, 2012  |  syntax: None  |  size: 13.88 KB  |  hits: 4  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Why does my applet blink when i repaint using multiple threads?
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import javax.swing.JApplet;
  5. import javax.swing.*;
  6. import java.awt.event.ActionListener;
  7. import java.io.*;
  8. import javax.swing.border.Border;
  9. /**
  10.  *
  11.  * @author IC
  12.  */
  13. public class taxiCab extends JApplet implements ActionListener {
  14.     private JTextField speed, distance, fare, fuel, ov, full, tf, tf_fuel, tf_speed;
  15.     private JButton butt, start, butt_pass, butt_sUp, butt_sDown, butt_refuel;
  16.     private JLabel label;
  17.     private JPanel main, north, south, south_left, south_right, center, center_content, north_speed, north_distance, north_fuel, north_fare;
  18.     private Container contain;
  19.     private int speedVal, distanceVal, passval, thread_sleep, status_width, fuel_width;
  20.     private float fuelVal, fareVal;
  21.     private Graphics g;
  22.     private String status;
  23.     private Font font2 = new Font("Kozuka Gothic Pro B", Font.BOLD, 60);
  24.     private Border border2 = BorderFactory.createLineBorder(Color.black, 3);
  25.     private Border border1 = BorderFactory.createLineBorder(Color.black, 1);
  26.     private final int width_ = 500;
  27.     private final int height_ = 300;
  28.     Thread thread1 = new trd1();
  29.     Thread thread2 = new trd2();
  30.     /**
  31.      * Initialization method that will be called after the applet is loaded into
  32.      * the browser.
  33.      */
  34.     public void init() {
  35.         setSize(width_,height_);
  36.         status = new String();
  37.         status = "VACANT";
  38.         status_width = -330;
  39.         Border border3 = BorderFactory.createLineBorder(Color.black, 5);
  40.                 thread1 = new trd1();
  41.                 thread2.start();
  42.                 thread2.suspend();
  43.         contain = new Container();
  44.         contain = getContentPane();
  45.         main = new JPanel(new BorderLayout());
  46.             north = new JPanel(new GridLayout(2,2));
  47.             north.setBackground(Color.blue);
  48.                 north_speed = new JPanel();
  49.                     tf_speed = new JTextField(10);
  50.                     tf_speed.setBorder(border1);
  51.                     tf_speed.setText("Speed");
  52.                     tf_speed.setHorizontalAlignment(JTextField.CENTER);
  53.                     tf_speed.setBackground(Color.CYAN);
  54.                     tf_speed.setEditable(false);
  55.                     speed = new JTextField(10);
  56.                     speed.setBorder(border1);
  57.                     speed.setEditable(false);
  58.                     speed.setText("-");
  59.                     speed.setHorizontalAlignment(JTextField.CENTER);
  60.                     north_speed.add(tf_speed);
  61.                     north_speed.add(speed);
  62.                 north_distance = new JPanel();
  63.                     tf = new JTextField(10);
  64.                     tf.setBorder(border1);
  65.                     tf.setText("Distance");
  66.                     tf.setHorizontalAlignment(JTextField.CENTER);
  67.                     tf.setBackground(Color.CYAN);
  68.                     tf.setEditable(false);
  69.                     distance = new JTextField(10);
  70.                     distance.setBorder(border1);
  71.                     distance.setEditable(false);
  72.                     distance.setText("-");//<----------------------------------distance
  73.                     distance.setHorizontalAlignment(JTextField.CENTER);
  74.                     north_distance.add(tf);
  75.                     north_distance.add(distance);
  76.                 north_fuel = new JPanel();
  77.                     tf_fuel = new JTextField(10);
  78.                     tf_fuel.setBorder(border1);
  79.                     tf_fuel.setText("Fuel");
  80.                     tf_fuel.setHorizontalAlignment(JTextField.CENTER);
  81.                     tf_fuel.setBackground(Color.CYAN);
  82.                     tf_fuel.setEditable(false);
  83.                     fuel = new JTextField(10);
  84.                     fuel.setBorder(border1);
  85.                     fuel.setEditable(false);
  86.                     fuel.setText("-");
  87.                     fuel.setHorizontalAlignment(JTextField.CENTER);
  88.                     north_fuel.add(tf_fuel);
  89.                     north_fuel.add(fuel);
  90.                 north_fare = new JPanel();
  91.                     tf = new JTextField(10);
  92.                     tf.setBorder(border1);
  93.                     tf.setText("Fare");
  94.                     tf.setHorizontalAlignment(JTextField.CENTER);
  95.                     tf.setBackground(Color.CYAN);
  96.                     tf.setEditable(false);
  97.                     fare = new JTextField(10);
  98.                     fare.setBorder(border1);
  99.                     fare.setEditable(false);
  100.                     fare.setText("-");
  101.                     fare.setHorizontalAlignment(JTextField.CENTER);
  102.                     north_fare.add(tf);
  103.                     north_fare.add(fare);
  104.                 north.add(north_speed);
  105.                 north.add(north_distance);
  106.                 north.add(north_fuel);
  107.                 north.add(north_fare);
  108.             center = new JPanel(new BorderLayout(3,3));
  109.                 center_content = new JPanel(new GridLayout(2,1,0,15));
  110.                     ov = new JTextField(20);
  111.                     ov.setText("");
  112.                     ov.setBackground(Color.yellow);
  113.                     ov.setEditable(false);
  114.                     ov.setBorder(border2);
  115.                     full = new JTextField(20);
  116.                     full.setHorizontalAlignment(JTextField.CENTER);
  117.                     full.setText("FUELMeter");
  118.                     full.setIgnoreRepaint(true);
  119.                     full.setFont(font2);
  120.                     full.setBorder(border2);
  121.                     center_content.add(ov);
  122.                     center_content.add(full);
  123.                 center.add(center_content, "Center");
  124.                 center_content.setBackground(Color.yellow);
  125.                 label = new JLabel("   ");
  126.                 center.add(label, "North");
  127.                 label = new JLabel("   ");
  128.                 center.add(label, "West");
  129.                 label = new JLabel("   ");
  130.                 center.add(label, "South");
  131.                 label = new JLabel("   ");
  132.                 center.add(label, "East");
  133.             south = new JPanel(new BorderLayout());
  134.                 south_left = new JPanel(new GridLayout(2,1));
  135.                     butt_sUp = new JButton("Speed Up");
  136.                     butt_sUp.setBorder(border1);
  137.                     butt_sUp.addActionListener(this);
  138.                     butt_sUp.setEnabled(false);
  139.                     south_left.add(butt_sUp);
  140.                     butt_sDown = new JButton("Speed Down");
  141.                     butt_sDown.setBorder(border1);
  142.                     butt_sDown.addActionListener(this);
  143.                     butt_sDown.setEnabled(false);
  144.                     south_left.add(butt_sDown);
  145.                 south_right = new JPanel(new GridLayout(2,1));
  146.                     butt_pass = new JButton("Passenger In");
  147.                     butt_pass.setBorder(border1);
  148.                     butt_pass.addActionListener(this);
  149.                     butt_pass.setEnabled(false);
  150.                     south_right.add(butt_pass);
  151.                     butt_refuel = new JButton("Refuel");
  152.                     butt_refuel.setBorder(border1);
  153.                     butt_refuel.addActionListener(this);
  154.                     butt_refuel.setEnabled(false);
  155.                     south_right.add(butt_refuel);
  156.                 butt = new JButton("Start");
  157.                 butt.setBorder(border1);
  158.                     butt.addActionListener(this);
  159.                 south.add(butt, "Center");
  160.                 south.add(south_left, "West");
  161.                 south.add(south_right, "East");
  162.         north.setBorder(border1);
  163.         center.setBorder(border1);
  164.         south.setBorder(border1);
  165.         center.setBackground(Color.yellow);
  166.         main.add(north, "North");
  167.         main.add(center, "Center");
  168.         main.add(south, "South");
  169.         main.setBorder(border1);
  170.         //main.setIgnoreRepaint(true);
  171.         contain.add(main);
  172.         contain.setVisible(true);
  173.         //contain.setIgnoreRepaint(true);
  174.  
  175.  
  176.     }
  177.     public void paint(Graphics g){
  178.         super.paint(g);
  179.         g.setColor(Color.black);
  180.         g.setFont(font2);
  181.         g.drawString(status, status_width, 140);
  182.         g.setColor(Color.yellow);
  183.         g.fillRect(2,82,12,70);
  184.         g.fillRect(getWidth()-14,82,12,70);
  185.         g.setColor(Color.black);
  186.         g.fillRect(0,82,2,70);
  187.         g.setColor(Color.GREEN);
  188.         g.fillRect(17,(getHeight()/2)+20,fuel_width,getHeight()-(83+(getHeight()/2)));
  189.         main.setBorder(border1);
  190.     }
  191.  
  192.     public void actionPerformed(ActionEvent e) {
  193.         if(e.getActionCommand() == "Start"){
  194.             butt.setLabel("Stop");
  195.             butt_pass.setEnabled(true);
  196.             fuelVal =  50.00f;
  197.             distanceVal = 0;
  198.             fareVal = 40.00f;
  199.             speedVal = 0;
  200.             fuel.setText(String.valueOf(fuelVal) + " L");
  201.             distance.setText(String.valueOf(distanceVal) + " km");
  202.             fare.setText("Php " + String.valueOf(fareVal));
  203.             speed.setText(String.valueOf(speedVal) + " kph");
  204.                 thread1 = new trd1();
  205.                 thread1.start();
  206.                 thread2 = new trd2();
  207.                 thread2.start();
  208.             //BufferedWriter bw;<-----------------------------------------------
  209.             }
  210.         else if(e.getActionCommand() == "Stop"){
  211.             butt.setLabel("Start");
  212.             butt_pass.setEnabled(false);
  213.             butt_sUp.setEnabled(false);
  214.             butt_sDown.setEnabled(false);
  215.             butt_refuel.setEnabled(false);
  216.             butt_pass.setLabel("Passenger In");
  217.  
  218.             thread1.stop();
  219.         }
  220.         else if(e.getActionCommand() == "Speed Up"){
  221.             if(speedVal == 0){
  222.                 speedVal+=25;
  223.                 speed.setText(String.valueOf(speedVal) + " kph");
  224.                 butt_sDown.setEnabled(true);
  225.                 tf_speed.setText("Speed");
  226.                 thread1 = new trd1();
  227.                 thread1.start();
  228.             }
  229.             else if(speedVal == 275){
  230.                 speedVal+=25;
  231.                 speed.setText(String.valueOf(speedVal) + " kph");
  232.                 //butt_sUp.setEnabled(false);
  233.                 tf_speed.setText("MAX SPEED");
  234.             }
  235.             else{
  236.                 speedVal+=25;
  237.                 speed.setText(String.valueOf(speedVal) + " kph");
  238.                 }
  239.         }
  240.         else if(e.getActionCommand() == "Speed Down"){
  241.             repaint();
  242.             if(speedVal==25){
  243.                 speedVal-=25;
  244.                 speed.setText(String.valueOf(speedVal) + " kph");
  245.                 tf_speed.setText("S T O P P E D");
  246.                 butt_sDown.setEnabled(false);
  247.             }
  248.             else if(speedVal == 300){
  249.                 speedVal-=25;
  250.                 speed.setText(String.valueOf(speedVal) + " kph");
  251.                 tf_speed.setText("Speed");
  252.                 butt_sUp.setEnabled(true);
  253.             }
  254.             else{
  255.                 speedVal-=25;
  256.                 speed.setText(String.valueOf(speedVal) + " kph");
  257.             }
  258.         }
  259.         else if(e.getActionCommand() == "Passenger In"){
  260.             butt_pass.setLabel("Passenger Out");
  261.             fareVal = 40.0f;
  262.             fare.setText("Php " + String.valueOf(fareVal));
  263.             butt_sUp.setEnabled(true);
  264.             butt_sDown.setEnabled(true);
  265.             butt_refuel.setEnabled(true);
  266.             speedVal = 25;
  267.             speed.setText(String.valueOf(speedVal) + " kph");
  268.             status = "OCCUPIED";
  269.                 thread1 = new trd1();
  270.                 thread1.start();
  271.  
  272.  
  273.         }
  274.         else if(e.getActionCommand() == "Passenger Out"){
  275.             status = "VACANT";
  276.             butt_pass.setLabel("Passenger In");
  277.             thread1.stop();
  278.         }
  279.         else if(e.getActionCommand() == "Refuel"){
  280.             if(fuelVal == 0.0f){
  281.                 fuelVal = 50.00f;
  282.                 fuel.setText(String.valueOf(fuelVal));
  283.                 tf_fuel.setBackground(Color.cyan);
  284.                 tf_fuel.setText("Fuel");
  285.                         fuel_width = (int)((getWidth()-34)*fuelVal/50f);
  286.                 thread1 = new trd1();
  287.                 thread1.start();
  288.             }
  289.             else{
  290.                 fuelVal = 50.00f;
  291.                 fuel.setText(String.valueOf(fuelVal) + " L");
  292.             }
  293.         }
  294.     }
  295.  
  296.     public class trd1 extends Thread implements Runnable {
  297.  
  298.         public void run(){
  299.             if(fuelVal>0.00f || speedVal>0){
  300.                 for(;;){
  301.                     try {
  302.                         Thread.sleep(50000/speedVal);
  303.                         if(fuelVal == 0.00f || speedVal == 0)
  304.                             thread1.stop();
  305.                         distanceVal++;
  306.                         fareVal += 1.00;
  307.                         fuelVal -=.25f;
  308.                         fuel_width = (int)((getWidth()-34)*fuelVal/50f);
  309.                         repaint();
  310.                         distance.setText(String.valueOf(distanceVal)+" km");
  311.                         fuel.setText(String.valueOf(fuelVal)+" L");
  312.                         fare.setText("P " + String.valueOf(fareVal));
  313.                     } catch (InterruptedException e) {
  314.                     }
  315.                 }
  316.             }
  317.             }
  318.         }
  319.     public class trd2 extends Thread implements Runnable {
  320.         //tf_fuel = new JTextField(15);
  321.  
  322.         public void run(){
  323.                 for(int b = 0;;b++){
  324.                     try {
  325.                         Thread.sleep(10);
  326.                         status_width +=1;
  327.                         if(status_width == getWidth())
  328.                             status_width = -330;
  329.                         repaint();
  330.                         if(fuelVal == 0.0f){
  331.                             if(b%2==0){
  332.                                 tf_fuel.setBackground(Color.red);
  333.                                 tf_fuel.setText("R E F U E L");
  334.                                 }
  335.                             else{
  336.                                 tf_fuel.setBackground(Color.cyan);
  337.                                 tf_fuel.setText("R E F U E L");
  338.                                 }
  339.                         }
  340.                     } catch (InterruptedException e) {
  341.                     }
  342.                 }
  343.  
  344.  
  345.         }
  346.     }
  347. }