products/sources/formale Sprachen/VDM/VDMPP/BuslinesWithDBPP/src/gui image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: View.java   Sprache: JAVA

Original von: VDM©

package gui;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.Line2D;
import java.io.IOException;
import java.util.*;
import javax.swing.JPanel;

class View extends JPanel implements Observer {

 private static final long serialVersionUID = 1L;
 public static final int GRID_SIZE  = 30;
 public static final int GRID_BORDER  = 2;
 
    Model model;
   
    int resFactor;
    Font font12, font16;
    
    transient Collection<Bus> buses;
    transient Collection<Waypoint> waypoints;
    transient Collection<Road> roads;
    transient Collection<Passenger> passengers;
    
    int inflow; 
    Object lock; 
    
    View(Model model) throws IOException {
     
     super();
        this.model = model;
        this.setBackground(Color.WHITE);
        font12 =  new Font("Lucida Sans Typewriter", Font.BOLD, 12);
        font16 = new Font("Lucida Sans Typewriter", Font.BOLD, 16);
        lock = new Object();
        inflow = 0;
        
        buses = model.getBuses();
        waypoints = model.getWaypoints();
        roads = model.getRoads();
        passengers = model.getPassengers();
        
  this.setLayout(null);
        this.setBackground(Color.WHITE);  
        resFactor = (int)(this.getHeight() / (GRID_SIZE));
    }

    transient Graphics2D g2;
    @Override
    public void paintComponent(Graphics g) {

        super.paintComponent(g);

        g2 = (Graphics2D) g;
        g2.setStroke(new BasicStroke(4));
        
        //draw road
        double y;
        for (Road r : roads) {
         
            if(r.isHighspeed())
             g2.setColor(Color.ORANGE);
            else
             g2.setColor(Color.black);
         
          for(Line2D rp : r.getRoadParts())
          {
           g2.drawLine(l(rp.getX1()), l(rp.getY1()), l(rp.getX2()), l(rp.getY2()));
           
           //center text on line
           y = rp.getY2() - rp.getY1() == 0.0 ? rp.getY1() : (rp.getY2() - rp.getY1()) / 2 + rp.getY1();
           if(rp.getX2() - rp.getX1() == 0.0 )
            g2.drawString(r.name(), l(rp.getX1()) + 5, l(y) );
           else
            g2.drawString(r.name(), l((rp.getX2() - rp.getX1()) / 2 + rp.getX1()) -7, l(y) - 5);
          } 
  } 
        
        //draw waypoints
        for (Waypoint wp : waypoints) {
         
         if(wp.IsStop())
             g2.setColor(Color.orange);
            else
             g2.setColor(Color.black);
         
            g2.drawRoundRect(l(wp.X()) -4 , l(wp.Y()) - 4, 8, 8, 10, 10); 
            g2.drawString(wp.Name(), l(wp.X()) + 5, l(wp.Y()) - 5);
  }
        
        //draw passengers waiting
        //these positions fit
        double h = 0, v = 0;
        
        synchronized (lock) {
         for (Passenger p : passengers) {
    
       if(p.isAnnoyed())
           g2.setColor(Color.RED);
          else
           g2.setColor(Color.GREEN);
          
       if(p.isOnBus())
        g2.fillOval(l(21.4), l(2 + v), 10, 10);
       else
        g2.fillOval(l(22.5 + h), l(2 + v), 10, 10);
           
           //calc grid
           v += 0.5;
           //start new row a 5 vertical
           if(v % 5 == 0){
            h += 0.5;
            v = 0;
            
            //limit to 5 horizontal rows
            if(h >= 5) break;
           }
   }
        }
        
        //draw buses
        int bX, bY;
        Point p;
        
  g2.setFont(font12);
        for (Bus b : buses) {
         
         g2.setColor(Color.RED);
         p = b.getBusPosition();
         bX = l(p.getX());
         bY = l(p.getY());
            g2.fillRect(bX - 7, bY - 7, 15, 15);
            g2.setColor(Color.black);
            g2.drawString("Pass: " + b.passengerCount(), bX +5,bY -10); 
            g2.drawString(Integer.toString(b.lineNr()), bX - 5, bY +5); 
  }
        
        g2.setFont(font16);
        g2.drawString("Inflow: " + inflow, this.getWidth() / 2, this.getHeight() ); 
    }
    
    public void update(Observable obs, Object arg) {
    
  if(arg == nullreturn;
  
  //window resize
        if(arg == "limits"){
         resFactor = (int) (this.getWidth() / (GRID_SIZE));
        } else if(arg == "passengerAdded"){
         synchronized (lock) {
          passengers = model.getPassengers();
         }
      repaint();
        } else if(arg == "passengerAnnoyed"){
            repaint();
        } else if(arg == "passengerGotOnBus"){
            repaint();
        } else if(arg == "inflowChanged"){
         inflow = model.getInflow(); 
      repaint();
        } else if(arg == "move"){
         buses = model.getBuses(); 
      repaint();
        } else if (arg == "busStopping"){
         repaint();
        }  else if (arg == "busAdded"){
         repaint();
        }  else if (arg == "busPassengerCount"){
         repaint();
        }  else if (arg == "planUpdated"){
            waypoints = model.getWaypoints();
            roads = model.getRoads();
         repaint();
        }
    }
 
    private int l(double steps)
    {
     return (int) (GRID_BORDER * resFactor + resFactor * Math.abs(steps));
    }
}
    

¤ Dauer der Verarbeitung: 0.17 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.


Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff