Rundungsfehler?

Smily0412

Mitglied
Hoi,

Müsste dieser Beispielcode nicht eigentlich eine geschlossene Fläche zeichnen?
Bei mir entstehen allerdings (z.B. nach dem vergrößern oder verkleinern des Frames) 1-pixel breite flächen, welche nicht mit gefüllt werden.

ist das ein Rundungsfehler des Compilers oder habe ich hier irgendwo einen denkfehler drin? :confused:
Code:
package test;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.image.BufferedImage;


public class Main extends Frame{
	private static final long serialVersionUID = 1L;

	private int sx = 30;
	private int sy = 30; 
	
	public Main() {
		setSize(500, 500);
		setVisible(true);
		setBackground(Color.BLACK);
		addComponentListener(new ComponentListener() {
			public void componentHidden(ComponentEvent e) {}
			public void componentMoved(ComponentEvent e) {}
			public void componentResized(ComponentEvent e) {repaint();}
			public void componentShown(ComponentEvent e) {}
			
		});
	}
	
	public void repaint() {
		Image i = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
		paint(i.getGraphics());
		getGraphics().drawImage(i, 0, 0, null);
		
	}
	
	public void paint(Graphics g) {
			int xstart = getInsets().left;
			int ystart = getInsets().top;
			int width = getWidth() - xstart - getInsets().right;
			int height = getHeight() - ystart - getInsets().bottom - 50;
			float feldwidth = (float) (width) / (float) (sx);
			float feldheight = (float) (height) / (float) (sy);
			
			g.setColor(Color.RED);

			for(int x = 0; x<sx; x++) 
				for(int y=0; y<sy; y++)
					g.fillRect(xstart + (int)(feldwidth*x), ystart + (int)(feldheight*y), (int)feldwidth, (int)feldheight);
			
			g.setColor(Color.LIGHT_GRAY);
			g.drawRect(xstart, ystart, width-1, height-1);
	}
	
	public static void main(String[] args) {
		new Main();
	}
}
 
Zurück