Portal > Foren > Java > Desktop-Applikationen und Grafik > kl. Zeichenprogramm - Farbe wird nicht gesetzt :*(
Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
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());
  252.       yf[0] = Integer.parseInt(st.nextToken());
  253.       xf[1] = Integer.parseInt(st.nextToken());
  254.       yf[1] = Integer.parseInt(st.nextToken());
  255.       xf[2] = Integer.parseInt(st.nextToken());
  256.       yf[2] = Integer.parseInt(st.nextToken());
  257.       Dreieck dr = new Dreieck (xf,yf,3);
  258.       dr.paint(mycan.getGraphics());
  259.       landschaft.add(current_to_save);
  260.       }
  261.       System.out.println("Figur wurde korrekt gezeichnet :-)");
  262.    
  263.     }
  264.     catch (NumberFormatException nfe) { System.err.println("Zeichnen nicht moeglich.
  265. Sie haben bei der Eingabe gepatzt.(Falsche Form!)");}
  266.     catch (NoSuchElementException nse) { System.err.println("Zeichnen nicht moeglich.
  267. Sie haben zuwenig Parameter eingeben.");}
  268.    
  269.   }
  270.  
  271.   public void safe_landschaft(){
  272.     try {
  273.     FileWriter fw = new FileWriter("landschaft.txt");
  274.     BufferedWriter bw = new BufferedWriter(fw);
  275.     PrintWriter pw = new PrintWriter(bw);
  276.     for (int i=0; i<landschaft.size(); i++){
  277.       pw.println((String)(landschaft.elementAt(i)));
  278.     }
  279.     pw.close();
  280.     }
  281.     catch (IOException io) { System.err.println("Mann, Sie haben ein Fehler beim speichern verusacht, grrr !");}
  282.   }
  283.  
  284.   public void load_and_paint(){
  285.     try {
  286.     FileReader fr = new FileReader("landschaft.txt");
  287.     BufferedReader br = new BufferedReader (fr);
  288.     String zeile;
  289.     while ((zeile = br.readLine()) != null) {
  290.     //while (br.ready()) {
  291.       //zeile = br.readLine();  // ginge auch !!
  292.           StringTokenizer st = new StringTokenizer (zeile,":");
  293.       String figur = st.nextToken();
  294.       String parameter = "";
  295.       parameter = (parameter+st.nextToken()); // Name mit ":" abgetrennt , Parameter mit ","
  296.       System.out.println("Gefunden: "+figur+":"+parameter);
  297.       parse_and_paint(parameter,figur);
  298.     }
  299.     br.close();
  300.     System.out.println("Erfolgreich geladen, Datei wieder geschlossen.");
  301.     }
  302.     catch (IOException io) { System.err.println("Mann, Sie haben ein Fehler beim laden verusacht, grrr !");}
  303.   } 
  304.  
  305.  
  306.   // Versprechen an ItemListener
  307.   public void itemStateChanged (ItemEvent ie){
  308.     if (ie.getStateChange() == ItemEvent.SELECTED){
  309.        if (ie.getSource() == schwarz)
  310.        mycan.getGraphics().setColor(Color.black);      
  311.        else if (ie.getSource() == blau)
  312.        mycan.getGraphics().setColor(Color.blue);      // Kein Effekt ?
  313.        else if (ie.getSource() == rot)      // getItem wird ja gar ned erfüllt !
  314.        System.out.println("ItemEvent: Farbe ROT !!!!! zefix");
  315.        //mycan.getGraphics().setColor(Color.red);
  316.        else if (ie.getSource() == gruen)
  317.        mycan.getGraphics().setColor(Color.green);
  318.        else if (ie.getSource() == gelb)
  319.        mycan.getGraphics().setColor(Color.yellow);
  320.       
  321.        System.out.println("ItemEvent: Farbe geaendert.");
  322.        // (erfolglose) tests zur Problemfindung
  323.        mycan.getGraphics().setColor( Color.blue );
  324.        mycan.getGraphics().drawRect(50,50,70,70);
  325.     } 
  326.   }
  327.  
  328.   // Versprechen an AcionListener
  329.   public void actionPerformed (ActionEvent e){
  330.     if (e.getSource()== zeichnen)
  331.       //myDialog1 dia1 = new myDialog1(this,"Figur wählen",true); // SOWAS GEHT NICHT ???????
  332.       new myDialog1(this,"Figur wählen",true);
  333.      else if (e.getSource()== speichern){
  334.       safe_landschaft();
  335.       System.out.println("ActionEvent: Datei landschaft.txt erflolgreich erstellt.");
  336.      }
  337.      else if (e.getSource()== lade_und_male){
  338.       System.out.println("ActionEvent: Lade landschaft.txt");
  339.       load_and_paint();
  340.      }
  341.   }
  342.  
  343.   // Versprechen an MouseMotionListener
  344.   public void mouseMoved (MouseEvent e) { }
  345.   long z = 0;
  346.   int x1 = 0;
  347.   int y1 = 0;
  348.   int x2 = 0;
  349.   int y2 = 0;
  350.   public void mouseDragged (MouseEvent e) {  // Spielerei
  351.     g = mycan.getGraphics();
  352.     z = z+1;
  353.      //System.out.println ("mouseMoved " + e);
  354.     if (z%2 == 0){
  355.     x2 = e.getX();
  356.     y2 = e.getY();
  357.     g.drawLine(x1, y1, x2, y2);
  358.     }
  359.     else {
  360.     x1 = e.getX();
  361.     y1 = e.getY();
  362.     g.drawLine(x2, y2, x1, y1);
  363.     }
  364.   }
  365.  
  366.  
  367.   public static void main (String []args){
  368.      x_mas_nr5 mein_programmObjekt = new x_mas_nr5();
  369.   }
  370.  
  371. }
[/quote]
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.01.2005, 20:58 Nach oben    #2
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Check mal, was das ItemEvent Dir an Source zurückgibt.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.01.2005, 15:58 Nach oben    #3
pro_evo
Gast
 
Beiträge: n/a
Standard

Hi,

also die if bedingung wird erfüllt wenn ich rot "anhake" wird der Text ausgegeben :

Java Code:
  1. else if (ie.getSource() == rot)       
  2.          System.out.println("ItemEvent: Farbe ROT !!!!! zefix");


was du meinst ist sowas oder ?
Java Code:
  1. else if (ie.getSource() == blau)
  2.        System.out.println(ie.getSource());
Da wird dann folgendes ausgegeben :

java.awt.CheckboxMenuItem[chkmenuitem0,label=Blau,state=true]

Hilft das ? Ich bin mit meinem Latein echt am Ende
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.01.2005, 21:48 Nach oben    #4
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Aber das Zeichnen geht? Bekommmst Du vielleicht das falsche Graphics-Object zurück?
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 16.01.2005, 22:02 Nach oben    #5
pro_evo
Gast
 
Beiträge: n/a
Standard

ja es funzt alles, auch das zeichnen (der Grafikkontext dazu wird in der Methode "parse_and_paint" übergeben (nämlich der des canvas "mycan" ) ... du kannst es ja gerne mal bei dir ausführen ...

nur eben das setzen der Farbe nicht ... es kommt dabei auch kein Fehler ... es hat nur einfach keinen Effekt

diese Graphics g is irgendwie so ein Schreckgespenst für mich ... hab das ganze noch ned 100% ig begriffen .. . ich schreib lieber irgendwo ein mal mehr getGraphics() ... aber System dahinter wäre mir eigentlich lieber .. :/
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.02.2005, 00:03 Nach oben    #6
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Was gibt Dir denn ein "getColor()" zurück, nachdem Du die Farbe gesetzt hast?
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.02.2005, 16:28 Nach oben    #7
fka Gottzilla
 
Benutzerbild von The_S
 
Registriert seit: 02.02.2005
Ort: Würzburg
Beiträge: 754
Standard

Dein Code ist echt ein wenig lang, poste bitte mal das wichtigste
The_S ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[CVS] Leserechte nach Commit für others nicht mehr gesetzt xabbuh Tools, Server, Betriebssysteme 2 19.06.2007 11:28
[gd2] ImageFilledRectangle wird ohne Farbe erstellt? Heimwerkerking PHP-Programmierung 3 06.09.2005 11:18
JTree Farbe smokie Desktop-Applikationen und Grafik 6 06.07.2005 15:14
eines verlangt - alle gesetzt!? Niki_Tesla Allgemeine Java-Programmierung 4 11.01.2005 22:07
Farbe im Quelltext? blackylk Allgemeine Java-Programmierung 1 09.12.2004 06:45


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47