2017-03-20 2 views
-3

Hallo allerseits Ich habe ein Stück Code, der ein Quadrat auf den Bildschirm druckt.Java Malerei Rechteck mit Doppel

g.fillRect(X,Y,squareSize,squareSize); 

I Quadratgröße zu erhalten am

int squareSize = (400/gridsize)-1; 

mit dem gridsize 3-200

eine beliebige Zahl zwischen sein kann

aber wenn ich über 130 gehen, ist squareSize immer 1. Gibt es eine Version der

g.fillRect 

, die einen doppelten anstelle einer Ganzzahl verwendet ?

weil, wenn es für etwas über 130 auf 1 rundet, Quadrate alle die gleiche Größe haben, während sie unterschiedliche Größen abhängig sein sollten.

so ist dies das Problem in einer visuellen Form.

150by150 enter image description here

200 von 200

enter image description here

+4

Wie stellen Sie sich Doppelkoordinaten vor, die ein Pixel darstellen? – Justas

+0

ah ok Ich denke, ich bekomme es jetzt ... – 1997DK

+0

Sie könnten sich 'java.awt.Rectangle2D' ansehen – MadProgrammer

Antwort

2

Gibt es eine Version des g.fillRect, die eine doppelte eher als ein Integer-Wert verwendet?

Wenn Sie die Dokumentation von java.awt.Graphics lesen, gibt es keine fillRect, die doppelte Parameter hat. Wenn Sie wirklich doppelte Werte verwenden müssen, können Sie Rectangle2D verwenden und diese Form mit der Methode fill(shape) füllen

double x = 0; 
double y = 0; 
double width = 100; 
double height = 100; 

Rectangle2D rect = new Rectangle2D.Double(x, y, width, height); 

//java.awt.Graphics doesn't have fill(shape), so you need to cast it to Graphics2D 
Graphics2D g2 = (Graphics2D) g; 

g2.fill(rect); 

Wie auch immer, wenn Sie versuchen, mit Subpixel-Präzision zeichnen müssen Sie RenderingHints.VALUE_STROKE_PURE ermöglichen. Sie können es wie folgt aktivieren

g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);