Swing erstellt fillreckt immmer ein neues object

coolian

Bekanntes Mitglied
hab ein for loop in dem ich
Java:
 g.fillreckt(); g.setColor();
aufrufe nun hab ich aber das problem das immer nur ein rechteck erstellt wird und das dann bewegt wenn ich den x oder y wert ändere der ganze for loop siet so aus
Java:
for(int i = 0; i < map.length; i++){
            for(int j = 0; j < map[i].length; j++){
                g.setColor(map[i][j].color);
                g.fillRect(map[i][j].x, map[i][j].y, map[i][j].width, map[i][j].height);
                map[i][j].x += 25;
                map[i][j].y += 25;
            }
        }

map ist ein doppel array aus objecten die so ausehen
Java:
package graphics;
import java.awt.Color;
public class Cube {
    public int width;
    public int height;
    public int x;
    public int y;
    public Color color;
   
    public Cube(int width, int height, Color color, int x, int y){
        this.width = width;
        this.height = height;
        this.x = x;
        this.y = y;
        this.color = color;
    }
}
sind also nur dafür da um ein paar sachen zu speichern
jetzt ist meine theorie das was ich im titel gesagt hab das aber wenn das so ist wie könnte ich das dann machen
 

Robat

Top Contributor
Zeig mal die Stelle wo du das Array mit Werten füllst. Deine Rechtecke liegen bestimmt einfach nur über einander
 

coolian

Bekanntes Mitglied
Java:
for(int i = 0; i < 24; i++){
            for(int j = 0; j < 32; j++){
                map[i][j] = r.c[i][j];
            }
        }
 

coolian

Bekanntes Mitglied
Java:
public class MapReader {
    int [][] mapi;
    public Cube [] [] c;
    public MapReader(int [][] mapi){
        mapi = new int [24] [32];
        this.mapi = mapi;
        c = new Cube[24] [32];
        Converter();
    }
   
    public void Converter(){
        int x = 0;
        int y = 0;
        for(int i = 0; i < mapi.length; i++){
            for(int j = 0; j < mapi[i].length; j++){
                switch(mapi[i][j]){
                case 0:
                    c[i][j] = new Cube(25, 25, Color.GRAY, x, y);
                    break;
                }
            }
        }
    }
   
    public Cube[][] getCubeMap(){
        return c;
    }
   
}
 

coolian

Bekanntes Mitglied
hast recht jetzt hab ich nach dem switch noch y += 25 und x += 25 gemacht macht zwar noch nicht hundertprozent das was ich will aber das krieg ich glaube ich hin
 

Robat

Top Contributor
Dann darfst du x und y nicht beide gleichzeitig erhöhen. Deine äußere Schleife zählt die Zeilen, deine innere die Spalten. Bei jeder neuen Spalte (also bei jedem Durchlauf der inneren Schleife) willst du die x Koordinate erhöhen, bei jeder neuen Zeile (also bei jedem Durchlauf der äußeren Schleife) willst du die y Koordinate erhöhen.
 

mihe7

Top Contributor
Oder mal ganz allgemein:
Java:
int xOffset = 0;
int yOffset = 0;
for (int i = 0; i < numberOfTiles; i++) {
    int row = i / tilesPerRow;
    int col = i % tilesPerRow;
    int x = col * tileWidth;
    int y = row * tileHeight;
    drawTile(/* i, */ // optional Angabe des Tile-Index
        xOffset + x, yOffset + y);
}
Nachtrag: noch allgemeiner gehts natürlich, wenn die Tiles Objekte sind.
 

coolian

Bekanntes Mitglied
ungefähr so
Java:
for(int i = 0; i < mapi.length; i++){
           
            for(int j = 0; j < mapi[i].length; j++){
                switch(mapi[i][j]){
                case 0:
                    c[i][j] = new Cube(25, 25, Color.GRAY, x, y);
                    break;
                }
                x += 25;
            }
            y += 25;
        }
damit wird aber aus welchen gründen auch immer nur die obere linie angezeigt
 

coolian

Bekanntes Mitglied
doch nicht wenn ich ds fenster das ist zur zeit 600*800 größer mache sehe ich das nach einer reihe es ein nach unten geht aber er fängt eine neue zeile an aber das krieg ich hin in dem ich x auch nach jedem durchlauf resete
 

mihe7

Top Contributor
Ersetz die 25 mal durch eine Variable bzw. zwei Variablen. Wenn Du die Tilegröße mal anpassen musst, bist Du sonst nur noch am Suchen und Ersetzen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 SceneBuilder GUI erstellt, nun muss ich noch ein Polygon erstellen, ist die Connection möglich? Allgemeine Java-Themen 3
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
N 3D Grafik erstellt Allgemeine Java-Themen 5
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
ZH1896ZH Best Practice Wie erstellt man am besten einen Kalender? Allgemeine Java-Themen 3
S createTempFile erstellt keine temporäre Datei Allgemeine Java-Themen 13
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2
A Java erstellt Script und konvertier zu EXE Allgemeine Java-Themen 4
MineJoke "Config" Datein wir bei neustart des Programms neu erstellt? Allgemeine Java-Themen 0
M Windows 98 - Mit welchem JDK (Version) kann noch Programm dafür erstellt werden Allgemeine Java-Themen 6
I Projekt wird nicht erstellt Allgemeine Java-Themen 2
G PrintWriter in .jar erstellt keine Datei Allgemeine Java-Themen 4
R Pdf öffnen, das von iText erstellt wurde Allgemeine Java-Themen 4
J Wie erstellt man die 'exe'-Dateien? Allgemeine Java-Themen 7
G Dateien löschen welche vor heute erstellt wurden? Allgemeine Java-Themen 7
T Thumbnails erstellt: Total schlechte Qualität: Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben