products/sources/formale Sprachen/Isabelle/Tools/jEdit/dist/doc image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

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

Datei: interlis.xml   Sprache: Text

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.20 Sekunden  (vorverarbeitet)  ¤





Kontakt
Drucken
Kontakt
sprechenden Kalenders

Eigene Datei ansehen




schauen Sie vor die Tür

Fenster


Die Firma ist wie angegeben erreichbar.

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff