# Hashmap :(



## AA (17. Mai 2009)

Hallo Zusammen,
ich versuche jetzt ein spieleditor in Java zu programmieren. Es muss so funktioniert dass die Spiel fläche wie ein schachbret geteilt wird und hat booleanwert 0 und wenn drauf geklick wird hat dann wert 1.
habe so vor gehabt dass ich ein Hashmap schreibe und alle werte da speichern aber bei methode Put() bekomme ich immer ne Fehlermeldung und weiß nicht wie ich größe für mein hashmap festlegen kann.
Ich werde sehr dankbar sein wenn jemand mir tipps gibt was ich falsch mache oder wie ich es besser machen kann!

Grüße AA


----------



## Tomate_Salat (17. Mai 2009)

AA [einfallsreicher Name ]

Beispiel: du gehst zum Lehrer und sagst: daheim habe ich was gerechnet, aber mein Ergebnis ist falsch, können Sie mir sagen was ich falsch mache? Das Blatt liegt aber noch daheim.

Was wird der Lehrer sagen?  Bring das Blatt mit und korrigiere es. [sofern es nicht mein Mathe-Lehrer ist der darauf mit PECH antworten würde  ]

also: [noparse]
	
	
	
	





```
Source-Code
```
[/noparse]  und bei Source-Code alles Eintragen, was wir brauchen um dir helfen zu können 

MFG

Tomate_Salat


----------



## Marco13 (17. Mai 2009)

Wobei man noch erwähnen könnte, dass das eher nach einem Fall für einen boolean[][] array klingt (oder gleich einem eigenen Interface oder einer eigenen Klasse, die einen solchen kapselt)


----------



## Schandro (17. Mai 2009)

> wie ich größe für mein hashmap festlegen kann


Das ist der Vorteil von Collections gegenüber Arrays: Sie haben keine feste Größe! Du brauchst und kannst deswegen keine Größe festlegen.



> Put()


wenn überhaupt heisst das
"put"
Merkt man allein dadran, das der erste Buchstabe eines Methodennamens immer klein geschrieben wird.
(Siehe die java coding conventions)


----------



## AA (17. Mai 2009)

Hallo zusammen Danke für eure Schnell antwort also 

package meditorversuch;

import java.awt.Point;
import java.util.Map;

/**
 * 
 * @author AA
 */
public class HashMap {
    public static void main (String args[]){

  HashMap<String,Boolean> mapeditorHM = new HashMap<String,Boolean>();


    }

}
so habe ich geschrieben aber bei methode put() kommt immer ein fehlermeldung!! und versucht es selber zu erstellen:


 private void put(String string, Integer integer) {
        throw new UnsupportedOperationException("Not yet implemented");
    } 
ich weiß nicht warum?? 
oder habt ihr vlt. bessere Vorschlag wie ich es mit dem map editor machen kann

danke euch


----------



## AA (17. Mai 2009)

hmm noch was, ich versuche es nichmal besser zu beschreiben, ich muss ein Programm schreiben damit man ein spielfeld ändern kann, habe gedacht tue ich es in ein hashmap mit werde 0 und mann hat nachher ein tabelle mit alle 0 werte und wenn man irgendwo klicks dann wächselt man die werte von 0 zu 1 und werden dann die stellen gespert z.b wir ein mauer oder so dass die spieler nicht da fahremitn können, da es gespert wird. habt ihr bessere Vorschalg oder bin überhaupt mit hashmap richtig ?
Danke euch nochmal 

@ Tomate_Salat : AA ist kürzel von mein Vor und Nachname


----------



## Schandro (17. Mai 2009)

> bin überhaupt mit hashmap richtig


Definitiv nicht, entweder nimmste ein 2Dimensionales Array oder eine java.util.List mit "List"en drinnen.



> aber bei methode put() kommt immer ein fehlermeldung!!


Dann poste die Fehlermeldung, nicht den kläglichen, falschen Versuch von Eclipse doch noch was draus zu machen.


----------



## Tomate_Salat (17. Mai 2009)

AA hat gesagt.:


> Hallo zusammen Danke für eure Schnell antwort also
> 
> 
> ```
> ...



a) wo ist dein aufruf der methode put()? die müsste so aussehen:

```
mapeditorHM.put("abc",true);
```

b) Was soll die methode bitte bringen:

```
private void put(String string, Integer integer) {
        throw new UnsupportedOperationException("Not yet implemented");
}
```
soll diese deine HashMap füllen?! Hier verweise ich mal auf deine Initalisierung:

```
HashMap<String,Boolean> mapeditorHM
```

Da kommt kein Integer drin vor
Wenn du diese Methode verwendet hast, wundert mich nicht das da ne Meldung kommt, du schmeist ja auch eine Exception. 
Wenn die von dir geschriebene put-methode Sinn ergeben soll, müsste sie so aussehen

```
private void put(HashMap<String,Boolean> map, String string, boolean bool) {
        map.put(string,bool);
}
```
was aber trotzdem Sinnfrei wäre.

MFG Tomate_Salat


----------



## AA (17. Mai 2009)

private void put(HashMap<String,Boolean> map, String string, boolean bool) {
        map.put(string,bool);
}
also das habe ich net geschrieben das wie Schandro geschrieben hat ein Versuch von mein Netbeans war
 und wenn ich das schreibe ------>mapeditorHM.put("abc",true);
kommt cannot find symbol
symbol: methode put(java.long. string. boolean)

ich wollte auch erst ein 2Dimensionales Array benutzen aber habe ich nicht gewusst wie ich es dann darstellen kann unter mein png und da hashmapp ne tabele ist , habe ich gedacht dass es besser wäre, werde mit 2Dimensionales Array versuchen.

ich bin wirklich Anfängerin und deswegen stelle ich auch solche kömische Fragen! danke euch vielmals


----------



## Tomate_Salat (17. Mai 2009)

schau mal auf dein import:

```
import java.util.Map;
```

Benutze mal diesen 


```
import java.util.HashMap;
```

MFG 

Tomate_Salat


----------



## Lexi (17. Mai 2009)

Wenn du wirklich erst am Anfang stehst, solltest du vielleicht erstmal die Finger von Collections und den damit verbundenen Generics lassen, denn das führt, wie wir ja sehen erstmal nur zu Verwirrung.

Zum 2D Array:

```
//Deklaration eines 2D boolean Arrays
private boolean[][] mapEditor;

//Initialisierung des Arrays
//Die erste Zahl gibt die Länge des Arrays an, welcher die anderen Arrays enthält,
//die zweite gibt deren Länge an.
mapEditor = new boolean[5][5];

//Füllen des Arrays
mapEditor[0][0] = true;
mapEditor[0][1] = true;
//...
mapEditor[5][4] = false;
mapEditor[5][5] = true;
```


----------



## AA (17. Mai 2009)

ich studiere und das ist unsere Aufgabe, was ein 2D Array ist weiß ich aber mein spielfeld ist 800*600 pixel und ich werde es in 80 * 60  stücke teilen und die bekommen dann boolean werte 0 und wenn die geklickt werden bekommen die dann wert 1. und das muss hinter dem Hintergrund oder map laufen, da konnte ich mi2D Arraych net vorstellen dass es mit 2D Array geht.

Grüße AA


----------



## AA (17. Mai 2009)

mit import java.util.HashMap; kommt auch den selben Fehler.
ich weiß auch nicht warum, werde mit 2D array versuchen aber es intressiert mich schon warum es nicht geht mit put() ;-)
AA


----------



## Tomate_Salat (17. Mai 2009)

poste mal den kompletten code, der mit der hashmap zusammenhängen soll

MFG

Tomate_Salat


----------



## Lexi (17. Mai 2009)

```
import java.util.HashMap;

public class HashMapVersuch {
	public static void main(String[] args) {
		HashMap<Integer,String> map = new HashMap<Integer,String>();
		map.put(1,"eins");
		map.put(2,"zwei");
		map.put(3,"drei");
		System.out.println(map);
	}
}
```

So Initalisierst du eine Hashmap und fügst ihr Sachen hinzu. put() erwartet immer ein Objekt und den Schlüssel auf dieses Objekt. [ put(Schlüssel,Objekt) ]


----------



## AA (17. Mai 2009)

Lexi hat gesagt.:


> ```
> import java.util.HashMap;
> 
> public class HashMapVersuch {
> ...


aber ich möchte Booleanwerte geben, das heißt true oder Fals
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.util.HashMap;
package meditorversuch;

/**
 * 
 * @author AA
 */
public class HashMap {
    public static void main (String args[]){

  HashMap<String,Boolean> mapeditorHM = new HashMap<String,Boolean>();
  mapeditorHM.put("",true);




    }

}


----------



## Schandro (17. Mai 2009)

du kannst anscheinden nicht direkt "true" oder "false" übergeben. Du musst die vorher in die Wrapperklasse von *b*oolean, gennant "*B*oolean" packen:

schreib mal 
new Boolean(false)
_bzw._
new Boolean(true)

statt
false
_bzw._
true

€dit: Habs mal grade selber ausprobiert, bei Java 6 nimmt der Compiler auch die primitiven boolean Typen an. Falls es also nicht dadran liegt: ignorier diesen Post.


----------



## Lexi (17. Mai 2009)

Bitte poste deinen Code in Code Tags, das macht die ganze Sache um einiges einfacher lesbar 

Ja, so wie du das grad gepostet hast, sollte das auch funktionieren.
Du musst allerdings beachten, dass jeder Schlüssel in einer HashMap nur *einmal* vorkommen darf! 

Acuh wenn das jetzt funktioniert, so richtig Sinn ergibt das meiner Meinung nach noch nicht. Du willst doch ein 2D Feld, Hintergrund doer was auch immer repräsentieren. Da macht es doch wenig Sinn alle deine 80x60 Felder unsortiert, ohne Index in eine HashMap zu packen, oder ?


----------



## Tomate_Salat (17. Mai 2009)

AA hat gesagt.:


> aber ich möchte Booleanwerte geben, das heißt true oder Fals
> 
> ```
> /*
> ...



Was gibst du denen den für einen Schlüssel? Wie willst du später auf die Daten wieder zugreifen, wenn dieser leer ist? Versuchs mal so:


```
public static void main (String args[]){

  HashMap<Integer,Boolean> mapeditorHM = new HashMap<Integer,Boolean>();
  mapeditorHM.put(0,true);
}
```

dann kannst du den Wert so wieder abrufen:


```
mapeditorHM.get(0).booleanValue()
```

oder verändern:


```
mapeditorHM.put(0,false);
```

MFG

Tomate_Salat


----------



## AA (17. Mai 2009)

Tomate_Salat hat gesagt.:


> Was gibst du denen den für einen Schlüssel? Wie willst du später auf die Daten wieder zugreifen, wenn dieser leer ist? Versuchs mal so:
> 
> 
> ```
> ...


so habe ich auch den selben Fehlermeldung mit Put()
also ich weiß nicht on ich jetzt mit array 2d mache oder hier mit dem Hashmap!


@Lexi hast du ein Vorschlag wie mann es am besten machen kann?
Grüsse


----------



## AA (17. Mai 2009)

also mein Speilfeld ist 800*600 pixel und ich muss es wie schachbrett in kleine teile teilen, da 1 pix zu kleine wäre habe mich für 80*60 entschieden 

Grüsse


----------



## Tomate_Salat (17. Mai 2009)

Poste mal genau was du geschrieben hast, mit Initalisierung, import und Werteeintrag

MFG

Tomate_Salat


----------



## AA (17. Mai 2009)

```
import java.util.HashMap;


/**
 * 
 * @author AA
 */
public class HashMap {
    public static void main (String args[]){
 
  HashMap<Integer,Boolean> mapeditorHM = new HashMap<Integer,Boolean>();
  mapeditorHM.put(0,true);
}

}
```
das ist was ich geschrieben habe aber irgendwie gehts nicht


----------



## AA (17. Mai 2009)

und noch eine Frage wie kann ich ein hashmap mit 80 reihen und 60  spalten haben das heißt einfach größe eingeben.
http://www.at-mix.de/images/glossar/schachbrett.gif 
das ich so was auf mein Spielfeld haben kann und weiße wären 1 und schwarzen 0
grüße


----------



## Tomate_Salat (17. Mai 2009)

Nenn mal deine Hauptklasse nicht HashMap. Man sollte seine Klassen nicht so nennen, wie welche die schon existieren, wenn es nicht anderster möglich ist, ruft man die importierten klassen so auf:


```
java.util.HashMap<Integer, Boolean> map = new java.util.HashMap<Integer, Boolean>();
map.put(0, true);
```

*Edit*



AA hat gesagt.:


> und noch eine Frage wie kann ich ein hashmap mit 80 reihen und 60  spalten haben das heißt einfach größe eingeben.
> http://www.at-mix.de/images/glossar/schachbrett.gif
> das ich so was auf mein Spielfeld haben kann und weiße wären 1 und schwarzen 0
> grüße



Du kannst ja bei der HashMap auch eine eigene Klasse als Objekt nutzen:


```
import java.awt.Point;
import java.util.HashMap;


public class Spielfeld {
    private int color;
    private Point koord;
    
    public Spielfeld(int color,int x, int y) {
        this.color = color;
        this.koord = new Point(x,y);
    }

    public Spielfeld(int color,Point point) {
        this.color = color;
        this.koord = point;
    }
    
    public int getColor() {
        return this.color;
    }
    
    public int getX() {
        return this.koord.x;
    }
    
    public int getY() {
        return this.koord.y;
    }
}


class Spiel {
    public static void main(String[] args) {
        HashMap<Integer, Spielfeld> map = new HashMap<Integer, Spielfeld>();
        map.put(0, new Spielfeld(0,0,0));
        map.put(0, new Spielfeld(1,new Point(80,60)));
    }
}
```


MFG 

Tomate_Salat


----------



## AA (17. Mai 2009)

wow, es geht !!! danke ;-) *freu*:lol:
und noch eine frage weiß du vlt wie ich die tabellen erstellen kann mit 80*60 ? oder findest du es blödsinn? weil die werte muss ich nur einmal so eingeben und danach sollen die per Mausclick geändert werden, halt true-> false oder false -> true???:L


----------



## Lexi (17. Mai 2009)

@Tomate: Das Importieren soll die lange Schreibweise ersetzten, und einem Tipparbeit ersparen. Da hier aber die importierte Klasse als Klassenname verwendet wurde, kann man nur über den langen Namen auf die HashMap aus java.util zugreifen, insofern hast du auch wieder recht.

@AA Nenne bitte einfach deine Klasse um, dann funktioniert es auch.


----------



## Tomate_Salat (17. Mai 2009)

So könnte es klappen:


```
JPanel pane = new JPanel();
      
for(int i=0; i < map.size(); i++) {
            Color color = (map.get(i).getColor() == 0) ? Color.BLACK : Color.WHITE;
            JLabel tmp  = new JLabel();
            tmp.setBounds(map.get(i).getX(), map.get(i).getY(), 10, 10);
            tmp.setBackground(color);
            pane.add(tmp);
}
```


*Edit*


Lexi hat gesagt.:


> @Tomate: Das Importieren soll die lange Schreibweise ersetzten, und einem Tipparbeit ersparen. Da hier aber die importierte Klasse als Klassenname verwendet wurde, kann man nur über den langen Namen auf die HashMap aus java.util zugreifen, insofern hast du auch wieder recht.



Ich weis =)


MFG

Tomate_Salat


----------



## AA (17. Mai 2009)

wow, es geht !!!
	
	
	
	





```
import java.awt.Color;
import java.awt.Point;
import java.util.HashMap;
import javax.swing.JDesktopPane;
import javax.swing.JLabel;



public class Spielfeld {
    private int color;
    private Point koord;

    public Spielfeld(int color,int x, int y) {
        this.color = color;
        this.koord = new Point(x,y);
    }

    public Spielfeld(int color,Point point) {
        this.color = color;
        this.koord = point;
    }

    public int getColor() {
        return this.color;
    }

    public int getX() {
        return this.koord.x;
    }

    public int getY() {
        return this.koord.y;
    }
}
class Spiel {
    public static void main(String[] args) {
        HashMap<Integer, Spielfeld> map = new HashMap<Integer, Spielfeld>();
        map.put(0, new Spielfeld(0,0,0));
        map.put(0, new Spielfeld(1,new Point(80,60)));
        JDesktopPane pane = new JDesktopPane();
  
        for(int i=0; i < map.size(); i++) {
            JLabel tmp  = new JLabel();
            tmp.setBounds(map.get(i).getX(), map.get(i).getY(), 10, 10);
            tmp.setBackground(Color.BLACK);
            pane.add(tmp);
        }
       
    }

}
```
danke ;-)
jetzt muss ich erst die oberfläche in java machen und dann die Punkte dort zuweisen und per maus klick die ändern können. bin megas glücklich DANKE


----------



## Tomate_Salat (17. Mai 2009)

Np, helf doch gerne 

aber denk dran:
1. Das JDesktopPane (ich glaube aber es wird ein JPanel benutzt) von der Gui verwenden
2. Die Klasse Spielfeld braucht noch einen Setter für die Farbe:

```
public void setColor(int color) {
     if(color == 0 || color == 1) this.color = color;
}
```

Wenn die farbe nicht stimmt, kannste ja noch ein else-Teil machen und dort ne Exception oder so schmeise ^^.

MFG

Tomate_Salat


----------



## AA (17. Mai 2009)

Genau wollte ich auch jetzt fragen warum JLabel, in Gui JLabel ist ein feld wo man was rein schreibet oder net?
AA


----------



## Schandro (17. Mai 2009)

JLabel ist meistens einfach nur eine Zeile Text.

In JTextField bzw. JTextArea kann der Benutzer reinschreiben


----------



## AA (17. Mai 2009)

ja, sorry hast recht *bin doof*


----------



## Tomate_Salat (17. Mai 2009)

JLabels taugen doch nix. Musste es mit JPanels realisieren:

Spielfeld-Eigenschaften

```
import java.awt.Point;



public class Spielfeld {
    private int color;
    private Point koord;

    public Spielfeld(int color,int x, int y) {
        this.color = color;
        this.koord = new Point(x,y);
    }

    public Spielfeld(int color,Point point) {
        this.color = color;
        this.koord = point;
    }

    public void setColor(int color) {
        if(color == 0 || color == 1) this.color = color;
    }

    public int getColor() {
        return this.color;
    }

    public int getX() {
        return this.koord.x;
    }

    public int getY() {
        return this.koord.y;
    }
}
```

Das Programm:

```
import java.awt.Color;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author Thomas
 */
public class Main {

    /**
     * @autor Thomas S.
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        JFrame frame = new JFrame("Spielfeld");

        frame.setLayout(null);
        frame.setBounds(0,0,810,630);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final HashMap<Integer, Spielfeld> map = new HashMap<Integer, Spielfeld>();
        int color = 0;
        int index = 0;

        for(int i=0;i<80;i++) {
            for(int j=0;j<60;j++) {
                map.put(index, new Spielfeld(color, new Point(i,j)));
                index++;
                color = (color == 0) ? 1 : 0;
                
            }
        }

        JPanel panel    = new JPanel();
        panel.setBounds(0, 0, 800, 600);

        for( int i=0; i < map.size(); i++) {
            final int j  = i;
            Color colour = (map.get(i).getColor() == 0) ? Color.BLACK : Color.WHITE;
            JPanel tmp   = new JPanel();

            tmp.addMouseListener(new MouseListener() {
                int index = j;

                public void mouseClicked(MouseEvent e) {
                    int color = map.get(j).getColor();
                    color     = (color == 0) ? 1 : 0;
                    map.get(j).setColor(color);
                    Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                    e.getComponent().setBackground(colour);
                }

                public void mousePressed(MouseEvent e) {
                   
                }

                public void mouseReleased(MouseEvent e) {
                    
                }

                public void mouseEntered(MouseEvent e) {
                    
                }

                public void mouseExited(MouseEvent e) {
                    
                }
            });

            tmp.setBounds(map.get(i).getX(), map.get(i).getY(), 10, 10);
            tmp.setBackground(colour);
            panel.add(tmp);
        }

        frame.add(panel);
        frame.setVisible(true);
    }

}
```

MFG 

Tomate_Salat


----------



## AA (17. Mai 2009)

wow, das ist ja klasse, meine aller letzte frage heute! wie kann man die werte zu überprufen oder testen hier ausgeben, muss mit System.Out.println() gehen oder?

import java.awt.Point; hier bekommen ich eine fehlermeldung, verstehe ich au net warum.
ich werde jetzt erst dein Code studieren, danek dir nochmal:rtfm:


----------



## Tomate_Salat (17. Mai 2009)

mit System.out.println() kannst du werte ausgeben. Die siehst du dann in der Entwicklerumgebung o. in der Konsole des Betriebssystems


----------



## AA (17. Mai 2009)

ja genau nur zu testen ob die werte richtig sind oder funktioniert und richtige ausgabe muss dann in Gui passieren, werde ich java fx schreiben.


----------



## AA (17. Mai 2009)

color = (color == 0) ? 1 : 0; was hast du hier gemacht oder gemeint? ich verstehe es nicht. und die felder sind jetzt wie schachbret ich muss die erst alle weiß haben un dann nach Maus klcik werden die Schwarz halt, schwarz bedeutet gespert. Ich hätte selber nie auf de Idee gekommen es so zu schreiben
*respekt*


----------



## Tomate_Salat (17. Mai 2009)

```
color = (color == 0) ? 1 : 0;

// ist im prinzip das gleiche wie:

if(color == 0) {
   color = 1;
} else {
   color = 0;
}
```

also der Syntax:

(Bedingung) ? TRUE : FALSE;

ist die Bedienung True ist, liefert er das zurück was bei TRUE steht, ansonsten das was bei FALSE steht.

Um alle weis zu bekommen, musst du einfach nur die zeile

```
color = (color == 0) ? 1 : 0;
```

durch 

```
color = 1;
```
ersetzen.

Was du zurück-geliefert bekommst ist das was beim Mouselistener unter "MouseClicked" definiert ist

MFG

Tomate_Salat


----------



## AA (18. Mai 2009)

Danke dir nochmal:toll:


----------



## AA (18. Mai 2009)

Hallo zusammen, ich habe noch eine frage, gibts eine möglichkeit dass ich mit Maus mehrere von die diese Käschen markieren, ich meien anstadt einzeln zu klicken?

MFG


----------



## Marco13 (20. Mai 2009)

Kannst dir mal den MouseMotionListener ansehen, oder ggf. mal System.out.println- Ausgaben in "mouseEntered" machen ... vielleicht kriegst du's dann hin.


----------



## AA (21. Mai 2009)

Marco13 hat gesagt.:


> Kannst dir mal den MouseMotionListener ansehen, oder ggf. mal System.out.println- Ausgaben in "mouseEntered" machen ... vielleicht kriegst du's dann hin.



hallo, das habe ich schon hingekriegt aber wenn ich paar aufeinmal markieren möchte geht nicht,  habe so versucht! irgenwie habe ich was falsch gemacht oder vergessen 


```
public void mouseDragged(MouseEvent e) {
                    int color = map.get(j).getColor();
                    color = (color == 0) ? 1 : 0;
                    map.get(j).setColor(color);
                    Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                    e.getComponent().setBackground(colour);
                }
```
:rtfm:
MFG


----------



## Tomate_Salat (21. Mai 2009)

Ich hab mal die lösung gemacht:

```
public void mouseEntered(MouseEvent e) {
                    if(e.isAltDown()) {
                        int color = 0;
                        map.get(j).setColor(color);
                        Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                        e.getComponent().setBackground(colour);
                    }

                    if(e.isControlDown()) {
                         int color = 1;
                         map.get(j).setColor(color);
                         Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                         e.getComponent().setBackground(colour);
                    }
                }
```

wenn man ALT gedrückt hält, werden die felder schwarz und bei strg weis. 
Allerdings hat es manchmal seine hänger.

MFG

Tomate Salat

P.S.: Hab in letzter Zeit meine Code etwas verändert. Jetzt sitzen die panels direkt nebeneinander ohne lücken zwischendrin:


```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package schachfeld;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author Thomas
 */
public class Main {

    /**
     * @autor Thomas S.
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        JFrame frame = new JFrame("Spielfeld");

        frame.setBounds(0,0,815,644);
        frame.setLayout(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final HashMap<Integer, Spielfeld> map = new HashMap<Integer, Spielfeld>();
        //int color = 0;
        int index = 0;

        for(int i=0;i<80;i++) {
            for(int j=0;j<60;j++) {
                map.put(index, new Spielfeld(1, new Point(i*10,j*10)));
                index++;
                //color = (color == 0) ? 1 : 0;
                
            }
        }

        JPanel panel    = new JPanel();
        panel.setBounds(0, 0, 800, 600);
        panel.setLayout(null);

        for( int i=0; i < map.size(); i++) {
            final int j  = i;
            Color colour = (map.get(i).getColor() == 0) ? Color.BLACK : Color.WHITE;
            JPanel tmp   = new JPanel();

            tmp.addMouseListener(new MouseListener() {
                int index = j;

                public void mouseClicked(MouseEvent e) {
                    int color = map.get(j).getColor();
                    color     = (color == 0) ? 1 : 0;
                    map.get(j).setColor(color);
                    Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                    e.getComponent().setBackground(colour);
                }

                public void mousePressed(MouseEvent e) {
                   
                }

                public void mouseReleased(MouseEvent e) {
                    
                }

                public void mouseEntered(MouseEvent e) {
                    if(e.isAltDown()) {
                        int color = 0;
                        map.get(j).setColor(color);
                        Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                        e.getComponent().setBackground(colour);
                    }

                    if(e.isControlDown()) {
                         int color = 1;
                         map.get(j).setColor(color);
                         Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                         e.getComponent().setBackground(colour);
                    }
                }

                public void mouseExited(MouseEvent e) {
                    
                }
            });

            tmp.setBounds(map.get(i).getX(), map.get(i).getY(), 10, 10);
            tmp.setBackground(colour);
            panel.add(tmp);
        }

        frame.add(panel);
        frame.setVisible(true);
    }

}
```


----------



## AA (21. Mai 2009)

hallo, danke es funktioniert jetzt! ich habe den code auch bischen geändert eigentlich ist fast feritig.
ich habe gestern ne sitzung gehabt und habe 2 zusätzliche aufgaben bekommen 
1. muss ich danach ein JPG foto hochladen als Spiel hintergrund
2. mehr farben als schwarz und Weiß, das heißt blau für Wasser usw.
bin dabei die hin zu bekommen 

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * EditorFrame.java
 *
 * Created on 19.05.2009, 08:00:37
 */
package MapEditor;

import java.awt.Color;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Map;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;

/**
 *
 * @author AA
 */
public class EditorFrame extends javax.swing.JFrame {

    final Map<Integer, Field> map = new TreeMap<Integer, Field>();

    /** Creates new form EditorFrame */
    public EditorFrame() {
        initComponents();

        int color = 1;
        int index = 0;

        for (int i = 0; i < 80; i++) {
            for (int j = 0; j < 55; j++) {
                map.put(index, new Field(color, new Point(i, j)));
                index++;
            }
        }

        jPanel1.setBounds(0, 0, 800, 550);

        for (int i = 0; i < map.size(); i++) {
            final int j = i;
            Color colour = (map.get(i).getColor() == 0) ? Color.BLACK : Color.WHITE;
            JPanel tmp = new JPanel();

            map.get(i).setPanel(tmp);
            tmp.addMouseListener(new MouseListener() {

                int index = j;

                public void mouseClicked(MouseEvent e) {
                    int color = map.get(j).getColor();
                    color = (color == 0) ? 1 : 0;
                    map.get(j).setColor(color);
                    Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                    e.getComponent().setBackground(colour);
                }

                public void mousePressed(MouseEvent e) {
                }

                public void mouseReleased(MouseEvent e) {
                }

                public void mouseEntered(MouseEvent e) {
                   if(e.isAltDown()) {
                       int color = 0;
                       map.get(j).setColor(color);
                       Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                       e.getComponent().setBackground(colour);
                   }

                   if(e.isControlDown()) {
                        int color = 1;
                        map.get(j).setColor(color);
                        Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                        e.getComponent().setBackground(colour);
                   }
               }

                public void mouseExited(MouseEvent e) {
                }
            });

            tmp.addMouseMotionListener(new MouseMotionListener() {

                public void mouseDragged(MouseEvent e) {
                    
                }

                public void mouseMoved(MouseEvent e) {
                }
            });

            tmp.setBounds(map.get(i).getX() * 10, map.get(i).getY() * 10, 10, 10);
            tmp.setBackground(colour);
            jPanel1.add(tmp);
        }
        pack();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jRadioButton1 = new javax.swing.JRadioButton();
        jRadioButton2 = new javax.swing.JRadioButton();
        jRadioButton3 = new javax.swing.JRadioButton();
        jRadioButton4 = new javax.swing.JRadioButton();
        jRadioButton5 = new javax.swing.JRadioButton();
        jButton4 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setMinimumSize(new java.awt.Dimension(800, 550));
        jPanel1.setPreferredSize(new java.awt.Dimension(800, 550));
        jPanel1.setLayout(null);
        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.LINE_AXIS));

        jButton1.setText("OK");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanel2.add(jButton1);

        jRadioButton1.setText("Red   ");
        jRadioButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton1ActionPerformed(evt);
            }
        });
        jPanel2.add(jRadioButton1);

        jRadioButton2.setText("Brown  ");
        jPanel2.add(jRadioButton2);

        jRadioButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButton3ActionPerformed(evt);
            }
        });
        jPanel2.add(jRadioButton3);

        jRadioButton4.setText("Blue");
        jPanel2.add(jRadioButton4);

        jRadioButton5.setText("jRadioButton5");
        jPanel2.add(jRadioButton5);

        jButton4.setText("Upload");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        jPanel2.add(jButton4);

        jButton2.setText("Save");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        jPanel2.add(jButton2);

        jButton3.setText("Cancel");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        jPanel2.add(jButton3);

        getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH);

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileFilter(new FileFilter() {

            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".txt");
            }

            @Override
            public String getDescription() {
                return "txt Files";
            }
        });
        if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
            PrintStream stream = null;
            try {
                File file = fileChooser.getSelectedFile();
                stream = new PrintStream(new FileOutputStream(file));
                for (Integer i : map.keySet()) {
                    Field f = map.get(i);
                    stream.print(i);
                    stream.print(" ");
                    stream.print(f.getX());
                    stream.print(" ");
                    stream.print(f.getY());
                    stream.print(" ");
                    stream.println(f.getColor());
                }
            } catch (FileNotFoundException ex) {
                Logger.getLogger(EditorFrame.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                stream.close();
            }
        }
    }                                        

    private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:
    }                                             

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        
    }

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        System.exit(0);
    }

    private void jRadioButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JRadioButton jRadioButton1;
    private javax.swing.JRadioButton jRadioButton2;
    private javax.swing.JRadioButton jRadioButton3;
    private javax.swing.JRadioButton jRadioButton4;
    private javax.swing.JRadioButton jRadioButton5;
    // End of variables declaration
}
```


```
package MapEditor;

import java.awt.Point;
import javax.swing.JPanel;



public class Field {
    private int color;
    private Point koord;
    private JPanel panel;
    
    public Field(int color,int x, int y) {
        this.color = color;
        this.koord = new Point(x,y);
    }

    public Field(int color,Point point) {
        this.color = color;
        this.koord = point;
    }

    public void setColor(int color) {
        if(color == 0 || color == 1) this.color = color;
    }

    public int getColor() {
        return this.color;
    }

    public int getX() {
        return this.koord.x;
    }

    public int getY() {
        return this.koord.y;
    }

    /**
     * @return the panel
     */
    public JPanel getPanel() {
        return panel;
    }

    /**
     * @param panel the panel to set
     */
    public void setPanel(JPanel panel) {
        this.panel = panel;
    }
}
```


```
package MapEditor;



/**
 *
 * @author AA
 */
public class Main {


    public static void main(String[] args) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new EditorFrame().setVisible(true);
            }
        });

        /*
        JFrame frame = new JFrame("Map Editor");

        frame.setLayout(null);
        frame.setBounds(0, 0, 800, 550);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //File f = new File("tmp.txt");
        final HashMap<Integer, 	Field> map = new HashMap<Integer, 	Field>();
        
        int color = 1;
        int index = 0;

        for (int i = 0; i < 80; i++) {
            for (int j = 0; j < 55; j++) {
                map.put(index, new Field(color, new Point(i, j)));
                index++;
            }
        }

        JPanel panel = new JPanel();
        panel.setBounds(0, 0, 800, 550);

        for (int i = 0; i < map.size(); i++) {
            final int j = i;
            Color colour = (map.get(i).getColor() == 0) ? Color.BLACK : Color.WHITE;
            JPanel tmp = new JPanel();

            tmp.addMouseListener(new MouseListener() {

                int index = j;

                public void mouseClicked(MouseEvent e) {
                    int color = map.get(j).getColor();
                    color = (color == 0) ? 1 : 0;
                    map.get(j).setColor(color);
                    Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                    e.getComponent().setBackground(colour);
                }

                public void mousePressed(MouseEvent e) {
                }

                public void mouseReleased(MouseEvent e) {
                }

                public void mouseEntered(MouseEvent e) {
                }

                public void mouseExited(MouseEvent e) {
                }
            });

            tmp.setBounds(map.get(i).getX(), map.get(i).getY(), 10, 10);
            tmp.setBackground(colour);
            panel.add(tmp);

        }

        frame.add(panel);
        frame.setVisible(true);
        */
    }


   
}
```
kannst schauen bitte und mir nur deine Meinung sagen.
Danke


----------



## Tomate_Salat (21. Mai 2009)

1.) Bei den Radio-Buttons sind die Beschriftungen nicht ganz richtig, zudem könnte man ALLE auswählen. 
2.) wieso speichert man das Level über den OK-Button und nicht über den Safe-Button?
2.1) wenn man ein level, ohne Dateiendung anzugeben, speichert, bekommt sie keine. Könnte bei endanwendern zu unerwünschten komplikationen führen. Du könntest den Dateinamen mit 
	
	
	
	





```
.tolowercase().endswith(".txt");
```
 prüfen. 
2.2.) Die Sicherung enthält pro Kästchen eine Zeile mit 4 Ziffern. 3 würden reichen: bsp: X-Koordinate Y-Koordinate Color-ID  // (Color-ID, z.B. das 0 schwarz ist)

Das sind die Punkte [außer 2.2] die mir nicht so ganz gefallen haben, aber dein Konzept ist gut. Wenn die Bugs behoben sind, hast du schonmal (meiner Meinung nach) einen guten Anfang.
Zu 2.2: Du kannst das natürlich so lassen, aber da du mit Koordinaten arbeitest, könnte es dir die Sache später erleichtern

MFG

Tomate_Salat


----------



## AA (24. Mai 2009)

Guten Morgen danke hast recht gehabt! das mit dem Radio Button habe ich so gemacht dass die in eine Gruppe sind, daher kann man nur jetzt eine nur klicken. 


Tomate_Salat hat gesagt.:


> 1.) Bei den Radio-Buttons sind die Beschriftungen nicht ganz richtig, zudem könnte man ALLE auswählen.





> 2.) wieso speichert man das Level über den OK-Button und nicht über den Safe-Button?


 da habe ich auch geändert dass es alles gespeichert wird



> 2.1) wenn man ein level, ohne Dateiendung anzugeben, speichert, bekommt sie keine. Könnte bei endanwendern zu unerwünschten komplikationen führen. Du könntest den Dateinamen mit


 da habe ich noch nicht gemacht hast recht aber muss mich erst bischen schlau machen
 und habe nicht verstanden was du in Punkt 2.2 gemeint hast 
wünsche dir schönes Wochen Endd 

AA


----------



## Tomate_Salat (24. Mai 2009)

Ich erklärs gerne nochmal was ich gemeint habe, aber das was ich dir in 2.2. vorschlage ist wirklich mehr was subjektives:


Tomate_Salat hat gesagt.:


> 2.2.) Die Sicherung enthält pro Kästchen eine Zeile mit 4 Ziffern. 3 würden reichen: bsp: X-Koordinate Y-Koordinate Color-ID  // (Color-ID, z.B. das 0 schwarz ist)



Du hast ja ein Spielfeld mit 80*60 (oder so) feldern. Die haben im ideal-falle nicht alle die gleiche Farbe -> somit nicht die gleichen Eigenschaften. Wenn ich deine Sicherungsdatei richtig ausgelesen habe, legst du für jedes kästchen eine Zeile an, mit 4 Ziffern. Dabei beziehen sich die ersten 3 auf die Koordinaten und die letzte auf die Farbe. Ich denke, eine der drei Ziffern für die Koordinate gibt an, in welcher Zeile man sich auf dem Spielfeld befindet. Diese Ziffer könntest du dir sparen, da jedes Feld ja eine Koordinate hat, und nach dieser Platziert wird. Ich würde also 2 Ziffern für die Koordinaten und eine für die Farbe benutzen. 
Wenn dein Speicherverfahren falsch gedeutet habe (habe es jetzt nicht mit dem Code abgeglichen, sondern nur so die Datei angeschaut), dann vergiss was ich in 2.2 anspreche 

MFG 

Tomate_Salat

P.S.: Danke hatte en tolles WE, hoffe du auch


----------



## AA (24. Mai 2009)

Hallo,
jetzt verstehe ich was du meinst, mensch bin ich ja dooof! "Frauen und technik". Noch eine Fragen hast du ne Idee wie man ein Bild nach der Bearbeitung diese fläche darauf hochladen kann? ich meine ich glaube ich muss filechooser benutzen oder? aber ich muss dann auf diese fläche speichern !
hmmmmm, meine WE war oder ist immer noch Stressig! habe richtige Zeitdrück, am Donnerstag ist Abgabe 

MFG AA


----------



## AA (24. Mai 2009)

ich bin dabei die .txt format zu überprüfen
ich habe es so geschrieben
	
	
	
	





```
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileFilter(new FileFilter() {

            public boolean accept(File pathname) {
                if (pathname.getName().toLowerCase().endsWith(".txt")) {
                    return true;
                } else {
                    return false;
                }
            }
```
es kommt keine Fehlermeldung aber macht auch nicht dass was es machen soll! weiß jemand warum?
Danke in Voraus
MFG AA


----------



## Schandro (24. Mai 2009)

:\ immer dazuschreiben WAS er falsch macht, nicht nur DAS er etwas falsch macht.

Der wahrscheinliche Fehler: Es werden keine Ordner angezeigt.
Das leigt dadran, dass du im FileFilter keine Ordner akzeptierst
Schreibs so:

```
public boolean accept(File file) {
    return file.getName().toLowerCase().endsWith(".txt") || file.isDirectory();
}
```


----------



## AA (24. Mai 2009)

Schandro hat gesagt.:


> :\ immer dazuschreiben WAS er falsch macht, nicht nur DAS er etwas falsch macht.
> 
> Der wahrscheinliche Fehler: Es werden keine Ordner angezeigt.
> Das leigt dadran, dass du im FileFilter keine Ordner akzeptierst
> ...


 hallo Schandro, 
danke für dein Antwort, 
so funktioniert genau so wie davor plus dass die Ordners  auch gezeigt werden .
Ich möchte aber dass es automatik .txt am endegeschriben wird  dass es als txt gespeichert wird, so wird es ohne Endung gespeichert.
MFG 
AA


----------



## Schandro (24. Mai 2009)

damit hat der JFileChooser nichts zu tun.
Du musst den File den du vom JFileChooser zurückbekommst, nachträglich verändern
(einfache if Abfrage ob er bereits mit ".txt" endet, ansonsten dranhängen)


----------



## AA (24. Mai 2009)

```
public boolean accept(File pathname) {
                if (pathname.getName().toLowerCase().endsWith(".txt")) {
                    return true;
                } else {
                    return false;
                }
            }
```
habe ich doch hier gemacnt muss dann ein exception schmeißen oder ?


----------



## Schandro (24. Mai 2009)

Nein. dein FileFilter hat mit dem File den der User aussucht nichts zu tun.



> habe ich doch hier gemacnt muss dann ein exception schmeißen oder ?


^^ warum sollte da eine Exception geschmissen werden?? Das macht mal absolut keinen Sinn


Achso: Zurzeit erstellst du bei jedem aufruf von actionPerformed den JFileChooser neu, das ist EXTREM Performancefressend. Mach den JFileChooser zu ner Membervariable und initialisiere ihn per lazy initialization.


----------



## AA (24. Mai 2009)

Schandro hat gesagt.:


> Achso: Zurzeit erstellst du bei jedem aufruf von actionPerformed den JFileChooser neu, das ist EXTREM Performancefressend. Mach den JFileChooser zu ner Membervariable und initialisiere ihn per lazy initialization.


sorry aber ich verstehe nicht was du meinst 
ich habe gedacht ein Exception dass der Benutzer ne meldung bekommt dass er .txt eingeben soll oder am besten dass es selber automatisch .txt schreibt dann brauche ich kein Exception


Danke


----------



## Schandro (24. Mai 2009)

Ich zitiere mich mal selber:


> Du musst den File den du vom JFileChooser zurückbekommst, nachträglich verändern
> (einfache if Abfrage ob er bereits mit ".txt" endet, ansonsten dranhängen)



Den JFileChooser ansich kannst du nicht verändern.


€dit:
Bin mir grade nicht so sicher ob der Benutzer wirklich den Speicherort angeben soll.
Wenn's darum geht, dass der Benutzer en File auswählen soll der dann vom Programm geladen wird:
Bau ne Abfrage ein ob der File, der der Benutzer ausgewählt hat deinen Vorstellungen entspricht. Wenn nicht öffnest du den JFileChooser eben nochmal oder du machst mit der Klasse JOptionPane ne kleine Meldung für den Benutzer.
Das natürlcih alles nachdem der JFileChooser wieder geschlossen ist, während der JFileChooser offen ist kannst du nichts machen.


----------



## AA (24. Mai 2009)

also da hast du Recht, dasfür  ist eigentlich für Server gedacgt dass die Daten dort von txt datei gelesen wird. es geht nicht darum wo es gespeichert wird sondern in txt format gespeichert wird

MFG AA


----------



## Tomate_Salat (24. Mai 2009)

Schandro hat gesagt.:


> :\ immer dazuschreiben WAS er falsch macht, nicht nur DAS er etwas falsch macht.



Ich habe ihm gesagt WAS er falsch macht, ich habe im nur (noch) nicht gesagt WIE er es richtig stellt

MFG 

Tomate_Salat


----------



## Schandro (24. Mai 2009)

das Object meines Satzes war "JFileChooser", nicht "Tomate_Salat"


----------



## AA (24. Mai 2009)

Schandro hat gesagt.:


> das Object meines Satzes war "JFileChooser", nicht "Tomate_Salat"


also ich verstehe dich nicht, ich muss mich bischen schlau machen


----------



## AA (24. Mai 2009)

hallo nochmnal ich glaube wegen bildhochalden ist die Seite die Richtige Seite
:rtfm:
: Class ImageLoader


----------



## Tomate_Salat (25. Mai 2009)

Schandro hat gesagt.:


> das Object meines Satzes war "JFileChooser", nicht "Tomate_Salat"



*peinlich* ^^ Naja dann ignorier was ich geschrieben hab


----------



## AA (25. Mai 2009)

Tomate_Salat hat gesagt.:


> *peinlich* ^^ Naja dann ignorier was ich geschrieben hab


das ist aber nett von dirueh:


----------



## Schandro (25. Mai 2009)

Bilder z.b. von der Festplatte zu laden geht mit
ImageIO.read
am besten, dann brauchst du auch keine externe Bibliothek

bin aber grade nicht sicher ob du das mit "bildhochladen" meinst.


----------



## AA (25. Mai 2009)

genau das mein ich, dass man von seinen Rechner bild hochaldet und als hintergrund auf diese fläche hat.
bin dabei so zu machen dass mit filechooser gewählt wird und dann gleich getimage setzen oder ist es blödsinn?

```
JFileChooser fileChooser1 = new JFileChooser();
               fileChooser1.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
               int returnVal = fileChooser1.showOpenDialog((Component) evt.getSource());

               if (returnVal == JFileChooser.APPROVE_OPTION) {
                   // block oder Statement
            try {
                File file = fileChooser1.getSelectedFile();
                Image image = null;
                image = ImageIO.read(file);
            } catch (IOException ex) {
                Logger.getLogger(EditorFrame.class.getName()).log(Level.SEVERE, null, ex);
            }

               }
               else{
                   fileChooser1.setSelectedFile(null);
                   
               }
    }
```

aber soll das bild nacher auf mein ganze panel gezeigt wird!*bin doof*


----------



## Schandro (25. Mai 2009)

es kommt jetzt drauf an WIE das Bild angezeigt werden soll. Soll es an einer bestimmten Stelle sein oder soll es als Hintergrundsbild der gesamten GUI gemalten werden?


----------



## AA (25. Mai 2009)

Es soll als Hintergrundsbild der gesamten GUI gemalten werden.
ich habe heute mir überlegt es kann auch mit methode paint() überschrieben werden oder?


----------



## Schandro (25. Mai 2009)

wenn die komplette GUI auf ein JPanel geklebt wurde. kannst du paintComponent dieses JPanels überschreiben und dort das image (welches als Membervariable zwischengespeichert werden muss) malen.
Übrigens: Wenn du paintComponent überschreibst, solltest du als erstes super.paintComponent innerhalb von paintComponent  aufrufen.

Wenn du ein Beispielcode brauchen solltest frag nach.


----------



## AA (25. Mai 2009)

hallo zusammen, das mit ddem Hintergrung hochladen habe ich heute hingekriegt. 
	
	
	
	





```
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         



        JFileChooser fileChooser1 = new JFileChooser();
        FileNameExtensionFilter filter =new FileNameExtensionFilter("Bild", "jpg");
        fileChooser1.setAcceptAllFileFilterUsed(false);
        fileChooser1.setMultiSelectionEnabled(true);
        fileChooser1.addChoosableFileFilter(filter);
        fileChooser1.setDialogTitle("Wählen Sie Ihre Hintergrundbild:");
        
        fileChooser1.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        int returnVal = fileChooser1.showOpenDialog((Component) evt.getSource());

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            // block oder Statement
            try {
                File file = fileChooser1.getSelectedFile();
                image = ImageIO.read(file);
                repaint();


            } catch (IOException ex) {
                JOptionPane.showMessageDialog(null, "Datei konnte nicht gefunden werden", "Fehler", JOptionPane.ERROR_MESSAGE);
            }


        } else {
            fileChooser1.setSelectedFile(null);

        }
        
    }
```

 aber ich glaube ich muss mein ganze Programm  ändern  ich habe meine daten in ein treemap gespeichert und jetzt möchte ich die in txt speichern in treemap ist so dass die werden von key reihen folge gelesen das heißt key 0 x 1 y1 color 1
aber ich möchte die in ein matrix eingeben 80 * 55 und man nur farben nummer eingibt, glaube muss anstatt treemao entweder hashmap nehmen oder 2D Array...
habt ihr ne Idee?

so sieht es jetzt aus aber man kriegt nur eine liste die unter key sortiert ist und nicht X

```
public String getDescription() {
                return "txt Files (*.txt)";
            }
        });
        if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
            PrintStream stream = null;
            try {
                File file = fileChooser.getSelectedFile();
                stream = new PrintStream(new FileOutputStream(file));
                for (Integer i : map.keySet()) {
                    
                    Field f = map.get(i);
                    if (f.getY()== 0){
                        stream.print(f.getColor());
                                                
                    }else
                        stream.println();
                    

                    stream.print(i);
                    stream.print(" ");
                    stream.print(f.getX());
                    stream.print(" ");
                    stream.print(f.getY());
                    stream.print(" ");
                    stream.println(f.getColor());
                stream.print(f.getColor());

                }
```


```
final Map<Integer, Field> map = new TreeMap<Integer, Field>();
```

MFG AA


----------



## AA (25. Mai 2009)

yuhuuuu, es geht ich muss nicht was anderes nehmen kann bei treemap bleiben musste nur die for schleifen hier tauschen

```
for (int j = 0; j < 55; j++) {
            for (int i = 0; i < 80; i++) {
                map.put(index, new Field(color, new Point(i, j)));
                index++;
            }
        }
```
muss nur in matrix schreiben und nur farben ---> getcolor() eingeben 
MFG AA


----------



## AA (25. Mai 2009)

mensch bin ich ja doof, habe mir einfacher vorgestellt aber irgendwie klappt es nicht so was möchte ich in txt datei speichern----> matrix 80*55 und values sollen getcolor werte sein. aber es geht nicht!
kann bitte mir jemand helfen oder ein Tipp geben

Danke
AA


----------



## Tomate_Salat (25. Mai 2009)

Du kannst die TreeMap doch einfach wieder auslesen:


```
for(int i=0;i<map.size();i++) {
       // code
}
```

dann kannst du im for-container einfach die Werte des Field-Objektes auslesen

```
for(int i=0;i<map.size();i++) {
       // code
       int x = map.get(i).getX();
       int y = map.get(i).getY();
       //...usw
}
```

und dann halt die Daten so abspeichern, wie du es gerne haben möchtest 

MFG

Tomate_Salat


----------



## AA (26. Mai 2009)

Guten Morgen, 
danke für dein Amtwort aber wo9 kann ich dann color werte eintragen. es muss dann so sein ---> 
1010
0100
da wo getx=0 und gety=0 ist den getcolor=1 da wo getx=1 und gety=0 ist den getcolor=0 da wo getx=2 und gety=0 ist den getcolor=1  usw.

MFG AA


----------



## Tomate_Salat (26. Mai 2009)

AA hat gesagt.:


> Guten Morgen,
> 1010
> 0100
> da wo getx=0 und gety=0 ist den getcolor=1 da wo getx=1 und gety=0 ist den getcolor=0 da wo getx=2 und gety=0 ist den getcolor=1



? Du hast 2 Reihen à 4 Ziffern?! Was hat die 4te für eine Eigenschaft? Verwirrt mich gerade was du meinst. Wenn dann empfehle ich dir das so 


```
// X   Y  COLOR
   0   1    1
   0   0    1
```

Also jeweils mit einem leerzeichen dazwischen, sonst kannst du die Werte später nicht mehr auslesen[oder es kommt was unerwünschtes bei raus]!

du könntest es ja so machen:


```
String safe = "";
for(int i=0;i<map.size();i++) {
       // code
       int x = map.get(i).getX();
       int y = map.get(i).getY();
       int c = map.get(i).getColor();
       
       safe += x + " " + y + " " + c + "\n";
}

// Später dann den Safe-String in eine txt-Datei speichern
```

das \n erzwingt in der Datei danne einen Zeilenumbruch. Das Ergebnis könnte dann so aussehen:

0 0 1
0 1 3
0 2 0
0 3 2

MFG

Tomate_Salat


----------



## AA (26. Mai 2009)

hallo 
so habe ich es gemacht. ich möchte wie gesagt nur get Color werte specichern

```
public String getDescription() {
                return "txt Files";
            }
        });
        if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
            PrintStream stream = null;
            char output[][] = new char[55][];
            for (int i = 0; i < output.length; i++) {
                output[i] = new char[80];
            }
            try {
                File file = fileChooser.getSelectedFile();
                stream = new PrintStream(new FileOutputStream(file));
//                for (Integer i : map.keySet())
                for(int i=0; i<map.size();i++){
                    Field f = map.get(i);
                    int x= map.get(i).getX();
                    int y= map.get(i).getY();
                    char color = 0;
                    if ( f.getColor() == Color.BLACK) {
                        color = '0';
                    }
                    else if ( f.getColor() == Color.WHITE ) {
                        color = '1';
                    }
                    else {
                        color = '1';
                    }
                    output[y][x] = color;
                }
                for (int i = 0; i < output.length; i++) {
                    stream.println(new String(output[i]));
                }
            } catch (FileNotFoundException ex) {
                Logger.getLogger(EditorFrame.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                stream.close();
            }
        }

    }
```
ich wollte x und y wer nicht mehr aus geben nur color werte und das geht oben oder habe ich was falsch gedacht??

Danke
MFG 
AA


----------



## Tomate_Salat (26. Mai 2009)

Hast dus mal getestet? 
Also deine Arbeit mit den Arrays kann ich nicht beurteilen, ich selber arbeite nur ungern mit denen ^^. Also, teste es mal. Gerne arbeite ich mich ein wenig in Arrays ein, wenn es nicht funktionieren sollte und helfe dann. 

MFG

Tomate_Salat


----------



## AA (26. Mai 2009)

Guten Abend,
ich habe es getestet es funktioniert. die ziffern sind nicht x, y, color, sondern nur color .
Bsp:
http://upload.wikimedia.org/wikipedia/commons/d/d8/Matriz_organizacao.png 
hier j sind meine x, i meine y und a´s meine colors.
oder habe ich nicht richtig?
hmmm ich habe aber jetzt wo anderes Problem usw. meine repaint methode nicht funktioniet, ich glaube ich muss paint methode in extra klasse schreiben, da ich viele kleine Panels habe und dass bild unter diese Panel möchte, jetzt wenn ich den Fenster bewege und außerhalb den monitor gehe und wieder zurück ist das Bild weg

MFG 
AA


----------



## Tomate_Salat (26. Mai 2009)

ja scheint richtig zu sein.

zu deinem neuen Problem sage ich nur: Code her  
Wenn du das Bild hinter die Panels stellst, die deine "Spielsteine" repräsentieren, dann darfst du den neutralen (weißen) keine Farbe geben, sonst überdecken die das Bild (logischerweise). 

Das wäre jz mein Gedanke, was du gerade falsch machen könnest, aber wie gesagt: Code her 

MFG

Tomate_Salat


----------



## AA (26. Mai 2009)

guten abend, 
ja das auch muss irgendwie durchsichtig sein oder so. schicke ich dir gleich und gern mein code, habe paar sachen ganz geändert

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * EditorFrame.java
 *
 * Created on 19.05.2009, 08:00:37
 */
package MapEditor;

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Map;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 *
 * @author Aida
 */
public class EditorFrame extends javax.swing.JFrame {


    final Map<Integer, Field> map = new TreeMap<Integer, Field>();
    public Image image = null;

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        if (image != null) {
            g.drawImage(image, 0, 0, 800, 550, this);
        }
        for(int i=0; i<map.size();i++){
            Field f = map.get(i);
            int x= map.get(i).getX();
            int y= map.get(i).getY();
            if ( f.getColor() != Color.WHITE ) {
                g.setColor(f.getColor());
                g.fillRect(x*10, y*10, 10, 10);
            }
        }
        //zum Testenap
        System.out.println(jPanel1.getHeight() + "   " + jPanel1.getWidth());
    }

    /** Creates new form EditorFrame */
    public EditorFrame() {
        initComponents();

        Color color = Color.WHITE;
        int index = 0;


        for (int j = 0; j < 55; j++) {
            for (int i = 0; i < 80; i++) {
                map.put(index, new Field(color, new Point(i, j)));
                index++;
            }
        }

        jPanel1.setBounds(0, 0, 800, 550);


        for (int i = 0; i < map.size(); i++) {
            final int j = i;
            Color colour = map.get(i).getColor();
            JPanel tmp = new JPanel();

            map.get(i).setPanel(tmp);
            tmp.addMouseListener(new MouseListener() {

                int index = j;

                public void mouseClicked(MouseEvent e) {
                    Color color = map.get(j).getColor();
                    if ( color == Color.WHITE ) {
                        color = Color.BLACK; // passende Farbe
                    }
                    else {
                        color = Color.WHITE;
                    }
                    map.get(j).setColor(color);
                    e.getComponent().setBackground(color);
                }

                public void mousePressed(MouseEvent e) {
                }

                public void mouseReleased(MouseEvent e) {
                }

                public void mouseEntered(MouseEvent e) {
                    if (e.isAltDown()) {
                        Color color = Color.BLACK;
                        map.get(j).setColor(color);
                        e.getComponent().setBackground(color);
                    }

                    if (e.isControlDown()) {
                        Color color = Color.WHITE;
                        map.get(j).setColor(color);
                        e.getComponent().setBackground(color);
                    }
                }

                public void mouseExited(MouseEvent e) {
                }
            });

            tmp.addMouseMotionListener(new MouseMotionListener() {

                public void mouseDragged(MouseEvent e) {
                }

                public void mouseMoved(MouseEvent e) {
                }
            });

            tmp.setBounds(map.get(i).getX() * 10, map.get(i).getY() * 10, 10, 10);
            tmp.setBackground(colour);
            jPanel1.add(tmp);
        }
        repaint();
        pack();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        javax.swing.ButtonGroup group = new javax.swing.ButtonGroup();
        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        Black = new javax.swing.JRadioButton();
        Blue = new javax.swing.JRadioButton();
        Brown = new javax.swing.JRadioButton();
        Grey = new javax.swing.JRadioButton();
        Green = new javax.swing.JRadioButton();
        jButton1 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setMaximumSize(new java.awt.Dimension(800, 550));
        jPanel1.setMinimumSize(new java.awt.Dimension(800, 570));
        jPanel1.setPreferredSize(new java.awt.Dimension(800, 550));
        jPanel1.setLayout(null);
        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.LINE_AXIS));

        group.add(Black);
        Black.setText("Black    ");
        Black.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BlackActionPerformed(evt);
            }
        });
        jPanel2.add(Black);

        group.add(Blue);
        Blue.setText("Blue     ");
        Blue.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BlueActionPerformed(evt);
            }
        });
        jPanel2.add(Blue);

        group.add(Brown);
        Brown.setText("Brown    ");
        Brown.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BrownActionPerformed(evt);
            }
        });
        jPanel2.add(Brown);

        group.add(Grey);
        Grey.setText("Grey   ");
        Grey.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                GreyActionPerformed(evt);
            }
        });
        jPanel2.add(Grey);

        group.add(Green);
        Green.setText("Green ");
        Green.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                GreenActionPerformed(evt);
            }
        });
        jPanel2.add(Green);

        jButton1.setText("   Save   ");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanel2.add(jButton1);

        jButton4.setText("Bild Hochladen");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        jPanel2.add(jButton4);

        jButton3.setText("   Cancel   ");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        jPanel2.add(jButton3);

        getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH);

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileFilter(new FileFilter() {

            public boolean accept(File file) {
                return file.getName().toLowerCase().endsWith(".txt") || file.isDirectory();
            }

            @Override
            public String getDescription() {
                return "txt Files";
            }
        });
//        String safe = "";
//        for(int i=0;i<map.size();i++) {
//       int x = map.get(i).getX();
//       int y = map.get(i).getY();
//       int c = map.get(i).getColor();
//
//       safe += x + " " + y + " " + c + "\n";
//}

        if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
            PrintStream stream = null;
            char output[][] = new char[55][];
            for (int i = 0; i < output.length; i++) {
                output[i] = new char[80];
            }
            try {
                File file = fileChooser.getSelectedFile();
                stream = new PrintStream(new FileOutputStream(file));
//                for (Integer i : map.keySet())
                for(int i=0; i<map.size();i++){
                    Field f = map.get(i);
                    int x= map.get(i).getX();
                    int y= map.get(i).getY();
                    char color = 0;
                    if ( f.getColor() == Color.BLACK) {
                        color = '0';
                    }
                    else if ( f.getColor() == Color.WHITE ) {
                        color = '1';
                    }
                    else {
                        color = '1';
                    }
                    output[y][x] = color;
                }
                for (int i = 0; i < output.length; i++) {
                    stream.println(new String(output[i]));
                }
            } catch (FileNotFoundException ex) {
                Logger.getLogger(EditorFrame.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                stream.close();
            }
        }

    }                                        

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        System.exit(0);
    }                                        

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         



        JFileChooser fileChooser1 = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Bild", "jpg");
        fileChooser1.setAcceptAllFileFilterUsed(false);
        fileChooser1.setMultiSelectionEnabled(true);
        fileChooser1.addChoosableFileFilter(filter);
        fileChooser1.setDialogTitle("Wählen Sie Ihre Hintergrundbild:");

        fileChooser1.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        int returnVal = fileChooser1.showOpenDialog((Component) evt.getSource());

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            // block oder Statement
            try {
                File file = fileChooser1.getSelectedFile();
                image = ImageIO.read(file);
                repaint();


            } catch (IOException ex) {
                JOptionPane.showMessageDialog(null, "Datei konnte nicht gefunden werden", "Fehler", JOptionPane.ERROR_MESSAGE);
            }


        } else {
            fileChooser1.setSelectedFile(null);

        }

    }                                        

    private void BlueActionPerformed(java.awt.event.ActionEvent evt) {                                     
        // TODO add your handling code here:
}                                    

    private void BlackActionPerformed(java.awt.event.ActionEvent evt) {                                      
}                                     

    private void BrownActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // TODO add your handling code here:
}                                     

    private void GreyActionPerformed(java.awt.event.ActionEvent evt) {                                     
        // TODO add your handling code here:
}                                    

    private void GreenActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // TODO add your handling code here:
    }                                     

    // Variables declaration - do not modify                     
    private javax.swing.JRadioButton Black;
    private javax.swing.JRadioButton Blue;
    private javax.swing.JRadioButton Brown;
    private javax.swing.JRadioButton Green;
    private javax.swing.JRadioButton Grey;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    // End of variables declaration                   
}
```


```
package MapEditor;

import java.awt.Color;
import java.awt.Point;
import javax.swing.JPanel;



public class Field {
    private Color color;
    private Point koord;
    private JPanel panel;

    public Field(Color color,int x, int y) {
        this.color = color;
        this.koord = new Point(x,y);
    }

    public Field(Color color,Point point) {
        this.color = color;
        this.koord = point;
    }

    public void setColor(Color color) {
        this.color = color;
    }

    public Color getColor() {
        return this.color;
    }

    public int getX() {
        return this.koord.x;
    }

    public int getY() {
        return this.koord.y;
    }

    /**
     * @return the panel
     */
    public JPanel getPanel() {
        return panel;
    }

    /**
     * @param panel the panel to set
     */
    public void setPanel(JPanel panel) {
        this.panel = panel;
    }
}
```


```
package MapEditor;

import java.awt.Graphics;
import javax.swing.JFrame;



/**
 *
 * @author Aida
 */
public class Main {



    public static void main(String[] args) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new EditorFrame().setVisible(true);
            }

        });

        /*
        JFrame frame = new JFrame("Map Editor");

        frame.setLayout(null);
        frame.setBounds(0, 0, 800, 550);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //File f = new File("tmp.txt");
        final HashMap<Integer, 	Field> map = new HashMap<Integer, 	Field>();
        
        int color = 1;
        int index = 0;

        for (int i = 0; i < 80; i++) {
            for (int j = 0; j < 55; j++) {
                map.put(index, new Field(color, new Point(i, j)));
                index++;
            }
        }

        JPanel panel = new JPanel();
        panel.setBounds(0, 0, 800, 550);

        for (int i = 0; i < map.size(); i++) {
            final int j = i;
            Color colour = (map.get(i).getColor() == 0) ? Color.BLACK : Color.WHITE;
            JPanel tmp = new JPanel();

            tmp.addMouseListener(new MouseListener() {

                int index = j;

                public void mouseClicked(MouseEvent e) {
                    int color = map.get(j).getColor();
                    color = (color == 0) ? 1 : 0;
                    map.get(j).setColor(color);
                    Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
                    e.getComponent().setBackground(colour);
                }

                public void mousePressed(MouseEvent e) {
                }

                public void mouseReleased(MouseEvent e) {
                }

                public void mouseEntered(MouseEvent e) {
                }

                public void mouseExited(MouseEvent e) {
                }
            });

            tmp.setBounds(map.get(i).getX(), map.get(i).getY(), 10, 10);
            tmp.setBackground(colour);
            panel.add(tmp);

        }

        frame.add(panel);
        frame.setVisible(true);
        */
    }


   
}
```
bitte schön und fals du was nicht gut findest, kannst mir bitte sagen, das wurde mir bestimmt helfen.

Danke
MFG AA


----------



## Tomate_Salat (26. Mai 2009)

Die paint-methode ist doch unnötig. Willst du damit erreichen, dass manche Panels keine Farben haben? Das geht wesentlich einfacher, wenn du z.B. beim MouseListener folgendes zeile Hinzufügst:


```
public void mouseClicked(MouseEvent e) {
    // CODE
    Color colour = (color == 0) ? Color.BLACK : Color.WHITE;
    if(e.getButton() == 3) colour = null;
    e.getComponent().setBackground(colour);
}
```

Das in Zeile 4:


```
if(e.getButton() == 3) colour = null;
```

erkläre ich mal, falls du nicht weist, was hier passiert:
Wenn e.getButton() == 3 true ist, dann wurde die rechte Maustaste gedrückt. 
_Ich glaube 1 wäre linke und 2 wäre mausrad._
ok, also wenn die rechte Maustaste gedrückt wird, wird *colour* auf null gesetzt, somit hat das Panel keine Farbe mehr und wird durchsichtig.

MFG

Tomate_Salat


----------



## AA (26. Mai 2009)

```
public void paint(Graphics g) {
        super.paint(g);
        if (image != null) {
            g.drawImage(image, 0, 0, 800, 550, this);
        }
        for(int i=0; i<map.size();i++){
            Field f = map.get(i);
            int x= map.get(i).getX();
            int y= map.get(i).getY();
            if ( f.getColor() != Color.WHITE ) {
                g.setColor(f.getColor());
                g.fillRect(x*10, y*10, 10, 10);
            }
        }
        //zum Testenap
        System.out.println(jPanel1.getHeight() + "   " + jPanel1.getWidth());
    }
```
damit zeichne das image was ich hier hochgelaen habe--->

```
int returnVal = fileChooser1.showOpenDialog((Component) evt.getSource());

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            // block oder Statement
            try {
                File file = fileChooser1.getSelectedFile();
                image = ImageIO.read(file);
                repaint();
```
oder nicht?
heute habe ich mein Code ein anderer prof gezeigt, meinte ich soll piant methode in andere class schreiben und von dort paint rufen oder so was...???:L
Donnerstag muss ich es bischen präsentieren und habe richtig Angst, Mein software Projekt Prof. darf das Fenster nicht bewegen sonst ist alles weg 
MFG AA


PS: die farben bleiben das heißt wenn das bild weg ist die schwarz und weiße punkte bleiben ist auch gut so, aber das bild muss auch bleiben


----------



## Tomate_Salat (26. Mai 2009)

Nun ja, mit paint habe ich nicht viel Erfahrung. Aber du könntest ganz in den Hintergrund auch ein großes JLabel setzen, da kannste ganz einfach ImageIcons [also Bilder] reinsetzen und auch ändern.

der Syntax ist ziemlich einfach:


```
JLabel test = new JLabel();
test.setIcon(new ImageIcon( new File(/*PFAD*/)) );
```

bei der erstInitalisierung kannst du das ImageIcon auch in den Konstruktor setzen.

Das Bild kannst du mit dem JFileChooser auch ganz einfach laden, das einzige was du brauchst ist der Pfad zum Bild und der wird dir ja zurückgeliefert. 

Zu der paint-methode kann ich dir leider nicht weiterhelfen, denn mit der habe ich bisher nur im Tutorial gemacht.

P.S.: Viel Spaß bei der Präsentation, und bis donnerstag bekommste auch das Problem mit dem Bild gehändelt  

MFG

Tomate_Salat


----------



## AA (26. Mai 2009)

Danke für dein schnelle antwort, mit Jlabel habe ich erst probiert aber das Problem war dass das ich die punkte die ich gewählte habe nicht shen konnte aber deine Idee ist gut werde Morgen mich damit auseinander setzen. Heute muss mein Präsentation für morgen fertig machen, wissenschaftliche schreiben ----> soziales netzwerk  
und morgen muss mich mit meinem Quwllcode und Programm beschäftigen ich muss auch das grupps aktivieren für andere Farben außer schwarz und weiß und muss ich auch maps hochalden können und weiterarbeiten können und danach Junit tests schreinem, aber nicht bis diese donnertsag:toll: 




Tomate_Salat hat gesagt.:


> P.S.: Viel Spaß bei der Präsentation, und bis donnerstag bekommste auch das Problem mit dem Bild gehändelt


 ich hoffe es auch


wünsche dir nen schönen Abend 
MFG
AA


----------



## Tomate_Salat (26. Mai 2009)

na dann hf bei der Präsentation. Würd ma grob schätzen: bis moje und noch viel Erfolg^^

MFG

Tomate_Salat


----------



## AA (27. Mai 2009)

hallo, ich habe eine frage kannst du bitte mir sagen was das Methode hier macht??

```
void save(File selectedFile) {
        PrintStream ps = null;
        try {
            ps = new PrintStream(selectedFile);
            for (Field[] row : fields) {
                for (Field field : row) {
                    ps.print(Field.getShortForColor(field.c));
                }
                ps.println();
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(PaintPanel.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            ps.close();
        }
    }

[/jAVA]

[code=Java]public void paint(Graphics gc) {
        if (image != null) {
            gc.drawImage(image, 0, 0, getWidth(), getHeight(), new ImageObserver() {
                public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
                    repaint();
                    return (infoflags & ImageObserver.ALLBITS) == 0;
                }
            });
        }
        for (int i = 0; i < fields.length; i++) {
            Field row[] = fields[i];
            for (int j = 0; j < row.length; j++) {
                if (row[j].c == Color.WHITE && image != null) {
                    continue;
                }
                gc.setColor(row[j].c);
                gc.fillRect(row[j].r.x, row[j].r.y, row[j].r.width, row[j].r.height);
            }
        }
    }
```


PS: Wissenschaftliche Präsentation ist gut gelaufen! yuhuuu
MFG 
AA


----------



## Tomate_Salat (27. Mai 2009)

AA hat gesagt.:


> hallo, ich habe eine frage kannst du bitte mir sagen was das Methode hier macht??
> 
> ```
> void save(File selectedFile) {
> ...


----------



## AA (27. Mai 2009)

Danke das habe ich schon behauptet da ich das auch in Quell Code habe: 


```
private Field fields[][] = new Field[ROWS][COLUMNS];
    private Color color = Color.BLACK;
    private Image image;
```

 aber was bedeutet des denn? 
	
	
	
	





```
for (Field[] row : fields) {
                for (Field field : row) {
                    ps.print(Field.getShortForColor(field.c));
                }
                ps.println();
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(PaintPanel.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            ps.close();
        }
    }
```


----------



## AA (27. Mai 2009)

und des versteh auch net ganz???:L

```
public void paint(Graphics gc) {
        if (image != null) {
            gc.drawImage(image, 0, 0, getWidth(), getHeight(), new ImageObserver() {
                public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
                    repaint();
                    return (infoflags & ImageObserver.ALLBITS) == 0;
                }
            });
        }
        for (int i = 0; i < fields.length; i++) {
            Field row[] = fields[i];
            for (int j = 0; j < row.length; j++) {
                if (row[j].c == Color.WHITE && image != null) {
                    continue;
                }
                gc.setColor(row[j].c);
                gc.fillRect(row[j].r.x, row[j].r.y, row[j].r.width, row[j].r.height);
            }
        }
    }
```


----------



## Tomate_Salat (27. Mai 2009)

AA hat gesagt.:


> Danke das habe ich schon behauptet da ich das auch in Quell Code habe:
> 
> 
> ```
> ...



Ich weis nicht ob ich deine Frage richtig verstanden habe, aber die Methode macht [denke] folgendes:
1.) sie füllt das Array Row mit der 2ten Dimension vom fields-array [hier bin ich mir nicht 100% sicher]
2.) nun übergibt es die Werte in der 2ten for-schleife an das field-Field-Objekt um damit Arbeiten zu können
3.) der vorher geöffnete Prinstream schreibt eine Zeile mit den Daten in die Datei
4.) er schliest die datei 
	
	
	
	





```
ps.close()
```



AA hat gesagt.:


> und des versteh auch net ganz???:L
> 
> ```
> public void paint(Graphics gc) {
> ...



Ich denke hier ist dein Problem die Stelle:

```
if (image != null) {
            gc.drawImage(image, 0, 0, getWidth(), getHeight(), new ImageObserver() {
                public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
                    repaint();
                    return (infoflags & ImageObserver.ALLBITS) == 0;
                }
            });
        }
```
mit dem Image-Observer. Das ist wie ein Listener, der Zeichnet bei änderung des Bildes das Bild neu

MFG

Tomate_Salat


----------



## AA (27. Mai 2009)

hallo zusammen, noch eine frage
usw. warum hat er hier die forschleife so geschrieben mit : 

```
static String getNameForColor(Color color) {
        //for (init; test; update)
        //  anweisung;

        for (String name : name2Color.keySet()) {
            if (getColorForName(name) == color) {
                return name;
            }
        }
        return null;
    }
[/Java]
ich kenne for schleife so---->
Z.b.
[code=Java]
for (int i = 0; i < 20; i++) {  
  if (i % 3 == 0) {  
     continue;  
  }  
 System.out.println(i);  
 }
```



Danke
MFG AA


----------



## Tomate_Salat (27. Mai 2009)

Habe ich doch erklärt:


Tomate_Salat hat gesagt.:


> liest man ein Array aus, einfaches beispiel:
> 
> 
> ```
> ...



Diese forschleife liest das Array rechts vom >:< aus und fügt nach und nach deren inhalt dem Objekt links davon zu, welches man dann benutzen kann. 

MFG

Tomate_Salat


----------



## AA (27. Mai 2009)

das heißt wird diese Array gelesen oder?

```
private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        PaintPanel paintPanel = (PaintPanel) jPanel1;
        String name = (String)(jComboBox1.getSelectedItem());
        paintPanel.setColor(Field.name2Color.get(name));
    }
```
danke dir


----------



## Tomate_Salat (27. Mai 2009)

ja so kann mans auch beschreiben

MFG

Tomate_Salat


----------



## AA (31. Mai 2009)

hallo zusamman, 
am Donnerstag  ist alles gut gelaufen. Mein Programm funktioniert auch so weit gut, bis jetzt war so dass ich dann markierte bereiche und nicht markierte in ein txt datei sperichern musste für Server, jetzt muss ich genau umgekehrt machen usw. muss ein txt datei aufmachen ucn dann diese map weiter arbeiten können und wieder Speichern können


```
package mapeditor;

import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class EditorFrame extends javax.swing.JFrame {

    public EditorFrame() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanel1 = new PaintPanel();
        jPanel2 = new javax.swing.JPanel();
        jComboBox1 = new javax.swing.JComboBox();
        jBild = new javax.swing.JButton();
        jSave = new javax.swing.JButton();
        jChange = new javax.swing.JButton();
        jCancel = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        jFile = new javax.swing.JMenu();
        jMenuItemChange = new javax.swing.JMenuItem();
        jMenuItemPhote = new javax.swing.JMenuItem();
        jMenuItemSave = new javax.swing.JMenuItem();
        jMenuItemClose = new javax.swing.JMenuItem();

        FormListener formListener = new FormListener();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("robofight");

        jPanel1.setMinimumSize(new java.awt.Dimension(800, 550));
        jPanel1.setPreferredSize(new java.awt.Dimension(800, 550));
        jPanel1.setLayout(null);
        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.LINE_AXIS));

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "BLACK", "WHITE" }));
        jComboBox1.setMaximumSize(new java.awt.Dimension(120, 20));
        jComboBox1.setMinimumSize(new java.awt.Dimension(50, 20));
        jComboBox1.setPreferredSize(new java.awt.Dimension(50, 20));
        jComboBox1.addActionListener(formListener);
        jPanel2.add(jComboBox1);

        jBild.setText("Bild");
        jBild.addActionListener(formListener);
        jPanel2.add(jBild);

        jSave.setText("Speichern");
        jSave.addActionListener(formListener);
        jPanel2.add(jSave);

        jChange.setText("Ändern");
        jChange.addActionListener(formListener);
        jPanel2.add(jChange);

        jCancel.setText("Schließen");
        jCancel.addActionListener(formListener);
        jPanel2.add(jCancel);

        getContentPane().add(jPanel2, java.awt.BorderLayout.PAGE_END);

        jFile.setText("File");

        jMenuItemChange.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemChange.setText("Öffnen");
        jMenuItemChange.addActionListener(formListener);
        jFile.add(jMenuItemChange);

        jMenuItemPhote.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_B, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemPhote.setText("Bild laden");
        jMenuItemPhote.addActionListener(formListener);
        jFile.add(jMenuItemPhote);

        jMenuItemSave.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemSave.setText("Speichern");
        jMenuItemSave.addActionListener(formListener);
        jFile.add(jMenuItemSave);

        jMenuItemClose.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F4, java.awt.event.InputEvent.ALT_MASK));
        jMenuItemClose.setText("Schließen");
        jMenuItemClose.addActionListener(formListener);
        jFile.add(jMenuItemClose);

        jMenuBar1.add(jFile);

        setJMenuBar(jMenuBar1);

        pack();
    }

    // Code for dispatching events from components to event handlers.

    private class FormListener implements java.awt.event.ActionListener {
        FormListener() {}
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            if (evt.getSource() == jComboBox1) {
                EditorFrame.this.jComboBox1ActionPerformed(evt);
            }
            else if (evt.getSource() == jBild) {
                EditorFrame.this.jBildActionPerformed(evt);
            }
            else if (evt.getSource() == jSave) {
                EditorFrame.this.jSaveActionPerformed(evt);
            }
            else if (evt.getSource() == jChange) {
                EditorFrame.this.jChangeActionPerformed(evt);
            }
            else if (evt.getSource() == jCancel) {
                EditorFrame.this.jCancelActionPerformed(evt);
            }
            else if (evt.getSource() == jMenuItemChange) {
                EditorFrame.this.jMenuItemChangeActionPerformed(evt);
            }
            else if (evt.getSource() == jMenuItemPhote) {
                EditorFrame.this.jMenuItemPhoteActionPerformed(evt);
            }
            else if (evt.getSource() == jMenuItemSave) {
                EditorFrame.this.jMenuItemSaveActionPerformed(evt);
            }
            else if (evt.getSource() == jMenuItemClose) {
                EditorFrame.this.jMenuItemCloseActionPerformed(evt);
            }
        }
    }// </editor-fold>

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        PaintPanel paintPanel = (PaintPanel) jPanel1;
        String name = (String) (jComboBox1.getSelectedItem());
        paintPanel.setColor(Field.name2Color.get(name));
    }                                          

    private void jBildActionPerformed(java.awt.event.ActionEvent evt) {                                      
        JFileChooser jfc = new JFileChooser();
        jfc.setCurrentDirectory(new File("."));

        if (jfc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) {
            return;
        }

        try {
            PaintPanel paintPanel = (PaintPanel) jPanel1;
            Image image = ImageIO.read(jfc.getSelectedFile());
            paintPanel.setImage(image);
        } catch (IOException ex) {
            Logger.getLogger(EditorFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
}                                     

    private void jSaveActionPerformed(java.awt.event.ActionEvent evt) {                                      
        JFileChooser jfc = new JFileChooser();
        jfc.setCurrentDirectory(new File("."));
        if( jfc.showSaveDialog(this)==JFileChooser.APPROVE_OPTION) {
            PaintPanel paintPanel = (PaintPanel)jPanel1;
            paintPanel.save(jfc.getSelectedFile());
        }
}                                     

    private void jMenuItemChangeActionPerformed(java.awt.event.ActionEvent evt) {                                                
JFileChooser jfc = new JFileChooser();
        jfc.setCurrentDirectory(new File("."));
        if( jfc.showSaveDialog(this)==JFileChooser.APPROVE_OPTION) {
            PaintPanel paintPanel = (PaintPanel)jPanel1;
            paintPanel.save(jfc.getSelectedFile());
        }
}                                               

    private void jMenuItemPhoteActionPerformed(java.awt.event.ActionEvent evt) {                                               
        JFileChooser jfc = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Bild", "jpg");
        jfc.setAcceptAllFileFilterUsed(false);
        jfc.setMultiSelectionEnabled(false);
        jfc.addChoosableFileFilter(filter);
        jfc.setDialogTitle("Wählen Sie Ihre Hintergrundbild aus:");
        //jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);


        if (jfc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) {
            return;
        }

        try {
            PaintPanel paintPanel = (PaintPanel) jPanel1;
            Image image = ImageIO.read(jfc.getSelectedFile());
            paintPanel.setImage(image);
        } catch (IOException ex) {
            Logger.getLogger(EditorFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
}                                              

    private void jMenuItemSaveActionPerformed(java.awt.event.ActionEvent evt) {                                              
        JFileChooser fileChooser1 = new JFileChooser();
        fileChooser1.setCurrentDirectory(new File("."));
        if (fileChooser1.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
            PaintPanel paintPanel = (PaintPanel) jPanel1;
            paintPanel.save(fileChooser1.getSelectedFile());
        }

}                                             

    private void jMenuItemCloseActionPerformed(java.awt.event.ActionEvent evt) {                                               
        System.exit(0);
}                                              

    private void jChangeActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
}                                       

    private void jCancelActionPerformed(java.awt.event.ActionEvent evt) {                                        
        System.exit(0);
    }                                       

    // Variables declaration - do not modify
    private javax.swing.JButton jBild;
    private javax.swing.JButton jCancel;
    private javax.swing.JButton jChange;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JMenu jFile;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItemChange;
    private javax.swing.JMenuItem jMenuItemClose;
    private javax.swing.JMenuItem jMenuItemPhote;
    private javax.swing.JMenuItem jMenuItemSave;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JButton jSave;
    // End of variables declaration

}
```


```
package mapeditor;

import java.awt.Color;
import java.awt.Rectangle;
import java.util.TreeMap;

public class Field {

    static final TreeMap<String, Color> name2Color = new TreeMap<String, Color>() {

        {
            put("BLACK", Color.BLACK);
//            put("BLUE", Color.BLUE);
//            put("CYAN", Color.CYAN);
//            put("DARK_GRAY", Color.DARK_GRAY);
//            put("GRAY", Color.GRAY);
//            put("GREEN", Color.GREEN);
//            put("LIGHT_GRAY", Color.LIGHT_GRAY);
//            put("MAGENTA", Color.MAGENTA);
//            put("ORANGE", Color.ORANGE);
//            put("PINK", Color.PINK);
//            put("RED", Color.RED);
//            put("YELLOW", Color.YELLOW);
            put("WHITE", Color.WHITE);
        }
    };

    static Color getColorForName(String name) {
        return name2Color.get(name);
    }

    static String getNameForColor(Color color) {
        for (String name : name2Color.keySet()) {
            if (getColorForName(name) == color) {
                return name;
            }
        }
        return null;
    }

    static Character getShortForColor(Color color) {
        char c = 'a';
        for (String name : name2Color.keySet()) {
            if (getColorForName(name) == color) {
                return c;
            }
            c++;
        }
        return null;
    }

    Color c;
    Rectangle r;

    Field(Color color, Rectangle rect) {
        c = color;
        r = rect;
    }
}
```


```
package mapeditor;

public class Main {
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new EditorFrame().setVisible(true);
            }
        });
    }
}
```


```
package mapeditor;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.ImageObserver;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JPanel;

public class PaintPanel extends JPanel {

    final static int GRID_X = 10;
    final static int GRID_Y = 10;
    final static int GAP = 0;
    final static int ROWS = 55;
    final static int COLUMNS = 80;
    private Field fields[][] = new Field[ROWS][COLUMNS];
    private Color color = Color.BLACK;
    private Image image;

    void save(File selectedFile) {
        PrintStream ps = null;
        try {
            ps = new PrintStream(selectedFile);
            for (Field[] row : fields) {
                for (Field field : row) {
                    ps.print(Field.getShortForColor(field.c));
                }
                ps.println();
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(PaintPanel.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            ps.close();
        }
    }

    public Color getColor() {
        return color;
    }

    public void setColor(Color color) {
        this.color = color;
    }

    public Image getImage() {
        return image;
    }

    public void setImage(Image image) {
        this.image = image;
        repaint();
    }

    

    public PaintPanel() {
        for (int i = 0; i < fields.length; i++) {
            Field row[] = fields[i];
            for (int j = 0; j < row.length; j++) {
                Rectangle r = new Rectangle(j * (GRID_X+GAP), i * (GRID_Y+GAP), GRID_X, GRID_Y);
                row[j] = new Field(Color.WHITE, r);
            }
        }
        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                handleMouse(e);
            }
        });
        addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseDragged(MouseEvent e) {
                handleMouse(e);
            }
        });
        repaint();
    }

    @Override
    public void paint(Graphics gc) {
        if (image != null) {
            gc.drawImage(image, 0, 0, getWidth(), getHeight(), new ImageObserver() {
                public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
                    repaint();
                    return (infoflags & ImageObserver.ALLBITS) == 0;
                }
            });
        }
        for (int i = 0; i < fields.length; i++) {
            Field row[] = fields[i];
            for (int j = 0; j < row.length; j++) {
                if (row[j].c == Color.WHITE && image != null) {
                    continue;
                }
                gc.setColor(row[j].c);
                gc.fillRect(row[j].r.x, row[j].r.y, row[j].r.width, row[j].r.height);
            }
        }
    }

    private void handleMouse(MouseEvent e) {
        Point p = e.getPoint();
        if (p.x < 0 || p.x >= (GRID_X + GAP) * COLUMNS ||
                p.y < 0 || p.y >= (GRID_Y + GAP) * ROWS) {
            return;
        }
        int x = p.x / (GRID_X + GAP);
        int y = p.y / (GRID_Y + GAP);
        Field f = fields[y][x];
        f.c = getColor();
        repaint(f.r);
    }
}
```
habt ihre ne Vorschalg wie ich s am besten machen, ich muss glaube ich erst denn txt lesen in ein 2D array speichern und dann ausgeben oder?

MFG:toll:
schöne Pfingsten


----------



## AA (2. Jun 2009)

hallo zusammen 
ich komme hier net weiter.
icha habe so angefangen aber ich weiß nicht wi ich gewählte txt datei hier weiter fen muss

```
private void jChangeActionPerformed(java.awt.event.ActionEvent evt) {                                        
       JFileChooser fileChooser1 = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Maps", "txt");
        fileChooser1.setAcceptAllFileFilterUsed(false);
        fileChooser1.setMultiSelectionEnabled(false);
        fileChooser1.addChoosableFileFilter(filter);
        if (fileChooser1.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) {
            return;
         }
       try{
           testarray = new char[55][80];
           BufferedReader in = new BufferedReader(new FileReader(fileChooser1.getSelectedFile()));
           i = 0;
            sTemp = in.readLine();
            java.util.StringTokenizer stWerte = new java.util.StringTokenizer(sTemp, ",");
            j = 0;
            while (stWerte.hasMoreTokens()) {
                testarray[i][j] = (char) java.lang.Integer.parseInt(stWerte.nextToken());

                j++;

            }
            i++;


            } catch (FileNotFoundException ex) {
                Logger.getLogger(EditorFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
}
```

und wie ich das nachher in mein Panel zeichnen muss. es gehts aber auch hier net
kann mir bitte jemand helfen
Danke
MFG Aida


----------



## Marco13 (7. Jun 2009)

Falls Tomate_Salat nicht mehr antwortet, solltest du ggf. eine PRÄZISE Frage in einem neuen Thread stellen.


----------



## AA (7. Jun 2009)

Hallo zusammen,
ich danke euch alle, ich habe es schon geschrieben und abgegeben und mein Prof. war auch zufrieden. falls jemand es braucht einfach sagen dann werde ich hier schreiben.
wünsche euch schönes WE
AA


----------

