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?
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?
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();
}
}