Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Desktop-Applikationen und Grafik > kl. Zeichenprogramm - Farbe wird nicht gesetzt :*(
Antwort
 
Themen-Optionen
Alt 14.01.2005, 19:13   Nach oben    #1
pro_evo
Gast
 
Beiträge: n/a
Standard kl. Zeichenprogramm - Farbe wird nicht gesetzt :*(

Hi all,

bin eigentlich Java Anfänger, aber ich glaub bei AWT is mein Problem am besten aufgehoben.

Es ist ein kleines Malprogramm ... man kann 4 Figuren zeichnen und die Parameter selbst eingeben.

Ich wollte nun einbauen, dass man die Farbe setzen kann, Zeichenfläche ist das Canvas mit dem Namen "mycan".

Man kann zwar mehrere Haken setzen, aber dabei wird es halt immer die letzte die Farbe sein mit der er zeichnet, weil die Color eben bei jedem Haken machen neu gesetzt wird.
(so war es gedacht) nur leider wird die Farbe ja gar ned gesetzt

Also der Code is leider etwas lang, wichtig ist eigentlich die itemStateChanged aus dem Frame .
(der übergebene Grafikkontext ist doch der richtige oder ? bei der MEthode parse_and_paint klappts ja auch)


schonmal Danke im Voraus !

Java Code:
  1. import java.awt.event.*;
  2. import java.awt.*;
  3. import java.awt.Polygon;
  4. import java.util.*;
  5. import java.io.*;
  6.  
  7. interface GeometrieObjekt {
  8.   public void paint (Graphics g);         // Malen
  9.   public boolean contains (int x, int y); // Enthält das Objekt den Punkt (x, y)?
  10.   public String getName ();               // Was bist Du?
  11. }
  12.  
  13.  
  14. class Kreis implements GeometrieObjekt {
  15.   int r;      // r = Radius
  16.   int mx, my; // mx = x Mittelpunkt, my = y Mittelpunkt
  17.   public Kreis (int r, int x, int y) {
  18.     this.r = r; mx = x; my = y;
  19.   }
  20.   public void paint (Graphics g) {
  21.     // Hart rein funzt es , also der Grafikkontext stimmt
  22.     /*g = mycan.getGraphics();
  23.     g.setColor( Color.blue );*/
  24.     g.drawArc (mx-r, my-r, 2*r, 2*r, 0, 360);
  25.   }
  26.   public boolean contains (int x, int y) {
  27.     return (mx-x)*(mx-x)+(my-y)*(my-y) <= r*r;
  28.   }
  29.   public String getName () { return "Kreis"; }
  30. }
  31.  
  32. class RechtEck implements GeometrieObjekt {
  33.   int x, y, b, h; // Linke obere Ecke, Breite, Höhe
  34.   public RechtEck (int x, int y, int b, int h) {
  35.     this.x = x; this.y = y;
  36.     this.b = b; this.h = h;
  37.   }
  38.   public void paint (Graphics g) {
  39.     g.drawRect (x, y, b, h);
  40.   }
  41.   public boolean contains (int x, int y) {
  42.      return this.x <= x && x <= this.x+b &&
  43.             this.y <= y && y <= this.y+h;
  44.   }
  45.   public String getName () { return "Rechteck"; }
  46. }
  47.  
  48. class Ellipse implements GeometrieObjekt {
  49.     int x, y, b, h;
  50.     public Ellipse (int x, int y, int b, int h) {
  51.         this.x = x; this.y = y;
  52.         this.b = b; this.h = h;
  53.     }
  54.     public void paint (Graphics g){
  55.         g.drawOval(x,y,b,h);
  56.     }
  57.     public boolean contains (int x, int y) {
  58.         return ((x*x/b*b)+(y*y/h*h) != 1 );
  59.     }
  60.   public String getName () { return "Ellipse"; }   
  61. }
  62.  
  63. class Dreieck implements GeometrieObjekt {
  64.     int x[], y[];
  65.     int n;
  66.     Polygon polygon;
  67.     public Dreieck (int []x, int []y,int n){
  68.         this.x = x;
  69.         this.y = y;
  70.         this.n = n;
  71.         polygon = new Polygon(x,y,n);
  72.     }
  73.     public void paint (Graphics g) {
  74.         g.drawPolygon(x, y, n);
  75.     }
  76.     public boolean contains (int x, int y) {
  77.         return polygon.contains(x, y);
  78.     }
  79.     public String getName () { return "Dreieck"; }
  80. }
  81.  
  82. class myDialog1 extends Dialog implements ItemListener, ActionListener {
  83.    
  84.     private java.awt.List myList = new java.awt.List(6,false);
  85.     protected String[] geos = {"Kreis","Ellipse","Rechteck","Dreieck"};
  86.     private Button back = new Button ("Cancel");
  87.     private Frame parent;
  88.    
  89.     // Für Dialog 2
  90.     public myDialog1 (Dialog drueber,String titel, boolean modal){
  91.         super(drueber,titel,modal);
  92.     }
  93.     public myDialog1 (Frame parent,String titel, boolean modal){
  94.         super(parent, titel, modal);
  95.         this.parent = parent;
  96.         for (int i=0; i<geos.length; i++)
  97.         myList.add(geos[i]);
  98.         add(myList);
  99.         myList.addItemListener(this);
  100.         add("South", back);
  101.         back.addActionListener(this);
  102.         pack();
  103.         setVisible(true);
  104.     }
  105.    
  106.     public void itemStateChanged (ItemEvent ie){
  107.         dispose();
  108.         new myDialog2(this,myList.getSelectedItem(),parent);
  109.        
  110.     }
  111.    
  112.     public void actionPerformed (ActionEvent e){
  113.      if (e.getSource() == back)
  114.       dispose();
  115.     }
  116. }
  117.  
  118. class myDialog2 extends myDialog1 implements ActionListener {   
  119.    
  120.     TextField tf;
  121.     String vorbelegung, figur;
  122.     Frame parent;
  123.     private Button back = new Button ("Cancel");
  124.     private Button go = new Button ("Los zeichne");
  125.    
  126.    
  127.     public myDialog2 (Dialog drueber, String figur, Frame parent){
  128.         super(drueber, "Parameter eingeben (Wichtig:Auf die Form achten !)",true);
  129.         this.parent = parent;
  130.         this.figur = figur;
  131.         setLayout(new BorderLayout());
  132.         if (figur.equals("Kreis"))
  133.             vorbelegung = "radius,X-Koordinate von M,Y-Kooradinate von M";
  134.         if (figur.equals("Rechteck"))
  135.             vorbelegung = ("X-Start,Y-Start;Breite,Höhe");
  136.         if (figur.equals("Ellipse"))
  137.             vorbelegung = ("X-Start,Y-Start,Breite,Höhe");
  138.         if (figur.equals("Dreieck"))
  139.             vorbelegung = ("x1,y1,x2,y2,x3,y3");
  140.         tf = new TextField(vorbelegung);
  141.         add(tf);
  142.         add("West", back);
  143.         add("East", go);
  144.         go.addActionListener(this);
  145.         back.addActionListener(this);
  146.         pack();
  147.         setVisible(true);
  148.     }   
  149.    
  150.     public void actionPerformed (ActionEvent e){
  151.      if (e.getSource() == back)
  152.       dispose();
  153.      if (e.getSource() == go){
  154.      System.out.println("Ihre Eingabe: "+tf.getText());
  155.        ((x_mas_nr5)parent).parse_and_paint(tf.getText(), figur);
  156.        dispose();
  157.       }
  158.     }
  159. }
  160.  
  161.        
  162. public class x_mas_nr5 extends Frame implements ActionListener, MouseMotionListener, ItemListener {
  163.    
  164.     private Button zeichnen = new Button("Zeichne");
  165.     CheckboxMenuItem schwarz, blau, rot, gruen, gelb;
  166.     MenuItem speichern, lade_und_male;
  167.     private Canvas mycan = new Canvas()
  168.     private Vector geo = new Vector();
  169.     private  int []xf = new int[3];
  170.     private  int []yf = new int[3];
  171.     private  int x, y, breite, hoehe, radius;
  172.     Graphics g = mycan.getGraphics();
  173.     Vector landschaft = new Vector();
  174.     String current_to_save; // hat bereits das korrekte Format
  175.     
  176.  // Main-Frame Konstruktor 
  177.  public x_mas_nr5() {
  178.        super("Der Wunschzeichner");
  179.        add("South", zeichnen);
  180.       add(mycan);
  181.       zeichnen.addActionListener(this);
  182.       mycan.addMouseMotionListener (this);
  183.       initMenu();
  184.      
  185.       setBounds(200, 200, 640,480);
  186.        setVisible(true);
  187.        
  188.        addWindowListener (new WindowAdapter() {
  189.         public void windowClosing (WindowEvent event) {
  190.           System.err.println("Schon am Ende ?? Na ok. Bye.");System.exit (0);}});
  191.     }
  192.     
  193.  public void initMenu(){
  194.     MenuBar myBar = new MenuBar();
  195.     Menu myMenu = new Menu("Zeichenfarbe");
  196.     myBar.add(myMenu);
  197.     myMenu.add(schwarz = new CheckboxMenuItem("Schwarz"));
  198.     myMenu.add(blau = new CheckboxMenuItem("Blau"));
  199.     myMenu.add(rot = new CheckboxMenuItem("Rot"));
  200.     myMenu.add(gruen = new CheckboxMenuItem("Gruen"));
  201.     myMenu.add(gelb = new CheckboxMenuItem("Gelb"));
  202.     myMenu = new Menu ("Landschafts-Optionen");
  203.     myBar.add(myMenu);
  204.     myMenu.add(lade_und_male = new MenuItem ("Landschaft laden und malen"));
  205.     myMenu.add(speichern = new MenuItem ("Landschaft speichern"));
  206.  
  207.    
  208.     schwarz.addItemListener(this);
  209.     blau.addItemListener(this);
  210.     rot.addItemListener(this);
  211.     gruen.addItemListener(this);
  212.     gelb.addItemListener(this);
  213.     lade_und_male.addActionListener(this);
  214.     speichern.addActionListener(this);
  215.    
  216.     setMenuBar(myBar);
  217.   }     
  218.     
  219.   // Jede gezeichnete Figur wird dem Vector hinzugefügt 
  220.   public void parse_and_paint(String p, String figur){
  221.     StringTokenizer st = new StringTokenizer (p,",");
  222.     try{
  223.       current_to_save = (figur+":"+p);
  224.       if (figur.equals("Kreis")){
  225.       radius = Integer.parseInt(st.nextToken());
  226.       x = Integer.parseInt(st.nextToken());
  227.       y = Integer.parseInt(st.nextToken());
  228.       Kreis k = new Kreis (radius,x,y);
  229.       k.paint(mycan.getGraphics());  // wieso geht ned "g" ?
  230.       landschaft.add(current_to_save);
  231.       }
  232.       if (figur.equals("Rechteck")) {
  233.       x = Integer.parseInt(st.nextToken());
  234.       y = Integer.parseInt(st.nextToken());
  235.       breite = Integer.parseInt(st.nextToken());
  236.       hoehe = Integer.parseInt(st.nextToken());
  237.       RechtEck re = new RechtEck(x,y,breite,hoehe);
  238.       re.paint(mycan.getGraphics());
  239.       landschaft.add(current_to_save);
  240.       }
  241.       if (figur.equals("Ellipse")) {
  242.       x = Integer.parseInt(st.nextToken());
  243.       y = Integer.parseInt(st.nextToken());
  244.       breite = Integer.parseInt(st.nextToken());
  245.       hoehe = Integer.parseInt(st.nextToken());
  246.       Ellipse el = new Ellipse (x,y,breite,hoehe);
  247.       el.paint(mycan.getGraphics());
  248.       landschaft.add(current_to_save);
  249.       }
  250.       if (figur.equals("Dreieck")){
  251.       xf[0] = Integer.parseInt(st.nextToken(