Swing zeichnen

Diskutiere zeichnen im AWT, Swing, JavaFX & SWT Forum; Hallo! Ich möchte ein Gitter zeichnen Code: public void paint(Graphics graphics) { graphics.setColor(Color.black); int cells = 100;...

  1. Lucaaa
    Lucaaa Mitglied
    Hallo!
    Ich möchte ein Gitter zeichnen

    Code:
    Code (Java):

    public void paint(Graphics graphics) {
      graphics.setColor(Color.black);
      int cells = 100;
      for(int i=0; i<(cells); i++) {
       for(int j=0; j<(cells); j++) {
           
        int width = this.getWidth()/cells;
        int height = this.getHeight()/cells;
        int x = i*width;
        int y = j*height;
        graphics.drawRect(x,y,width,height);
       }
      }
     }
     
    Das Problem ist, das an der Seite (rechts und unten) immer ein wenig Platz bleibt, der größer wird je größer cells ist.
    Woran liegt das?
     
  2. Wenn du jetzt Java lernen möchtest, dann sichere dir hier unseren Java-Videokurs heute zum Sonderpreis (hier klicken!)
  3. mihe7
    mihe7 Bekanntes Mitglied
    Sagen wir mal, Du willst 100 Zellen. Und sagen wir mal Du getWidth() liefert 1050. Dann width = 1050 / 100 = 10 (Kachelbreite). Bei 100 Zellen macht das 100x10 = 1000 (Breite aller Kacheln) -> 50 Pixel bleiben übrig.
     
  4. Lucaaa
    Lucaaa Mitglied
    und was mache ich dagegen? ich kann ja keine 0.3 Pixel zeichnen oder so.
     
  5. httpdigest
    httpdigest Bekanntes Mitglied
    Code (Java):
    int cells = 100;
    float width = (float) this.getWidth() / cells;
    float height = (float) this.getHeight() / cells;
    for (int i = 0; i < cells; i++) {
      float x = i * width;
      float y = i * height;
      graphics.drawLine(0, (int) y, this.getWidth(), (int) y);
      graphics.drawLine((int) x, 0, (int) x, this.getHeight());
    }
     
  6. Lucaaa
    Lucaaa Mitglied
    funktioniert das so auch mit drawRect?
     
  7. mihe7
    mihe7 Bekanntes Mitglied
    Richtig rechnen :) S. Kommentar von @httpdigest. Hinter dem übergebenen Graphics-Objekt verbirgt sich ein Graphics2D-Objekt (downcast ist also möglich) und dort gibt es Methoden, die mit float arbeiten, so dass man dort tatsächlich 0,3 "Pixel" angeben kann. Das ist auch sinnvoll, da ein geräteunabhängiges Koordinatensystem (user space) verwendet wird.
     
  8. mihe7
    mihe7 Bekanntes Mitglied
    Probiers aus.
     
  9. httpdigest
    httpdigest Bekanntes Mitglied
    drawRect hierfür zu verwenden, ist totaler Overkill. Das macht aus einem O(n) Algorithmus einen O(n²) Algorithmus. Wieso willst du für jedes sichtbare kleine Rechteck auch ein tatsächliches Rechteck-Primitiv zeichnen?
    Jedes Rechteck teilt sich ja sowieso zwei seiner vier Seiten mit angrenzenden Rechtecken. Das heißt, du hast auch noch Overdraw, zeichnest also unnötigerweise Linien doppelt.
     
  10. Lucaaa
    Lucaaa Mitglied
    Weil die Rechtecke nicht immer leer sind, sondern auch gefüllt sein können. Genau genommen bräuchte jedes Rechteck auch einen onClickListener;
     
  11. httpdigest
    httpdigest Bekanntes Mitglied
    Das kannst du ja relativ einfach durch einen einzigen Click-Listener auf dem JPanel lösen, in welchem du dann mit Hilfe der übergebenen Koordinaten das selektierte Rechteck ermittelst.
     
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

zeichnen - Ähnliche Themen

GUI Kreuz zeichnen und Position ausgeben
GUI Kreuz zeichnen und Position ausgeben im Forum AWT, Swing, JavaFX & SWT
GUI Kreis zeichnen
GUI Kreis zeichnen im Forum AWT, Swing, JavaFX & SWT
Halbkreiszeichnen(Canvas) - Diesen mit Mouseevents bestücken
Halbkreiszeichnen(Canvas) - Diesen mit Mouseevents bestücken im Forum AWT, Swing, JavaFX & SWT
Bilder mit Graphics g zeichnen
Bilder mit Graphics g zeichnen im Forum Java Basics - Anfänger-Themen
Unittest - Benutzte Objekte/Variablen aufzeichnen
Unittest - Benutzte Objekte/Variablen aufzeichnen im Forum IDEs und Tools
Thema: zeichnen