Wie so oft kann es … unschöne … Auswirkungen haben, wenn man eine Frage zu beantworten versucht, die noch nicht genau genug formuliert wurde. Die Verwendung eines eigenen int-Arrays hätte dabei noch den kleineren technischen Nachteil, nämlich “nur” dass das Bild untrackable wird, aber u.U. den größeren Nachteil dass man denkt, “das muss in Java so kompliziert sein” und den Code unverstanden übernimmt. Das mit dem g.drawLine funktioniert erstmal nur für EINEN Punkt, und ich kann mir nicht vorstellen, dass der TO nur EINEN Punkt malen will (und die Vorstellung, dass er das mit sowas wie int p[][] = new int[1000*1000][2]
auf 1000x1000 Pixel erweitern könnte sollte weitere mögliche Nachteile deutlich machen).
Abgesehen von off-topic-Fragen wie z.B. warum denn da von JFrame geerbt werden soll, würde ich zuerst nachfragen, wofür diese Pixel gesetzt werden sollen, wie viele es sein sollen, was damit gemacht werden soll, wie groß der Bereich sein soll, um den es da geht usw…
Ich könnte mir vorstellen, dass sowas wie
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class SetPixelTest
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowGUI();
}
});
}
private static void createAndShowGUI()
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
PixelImageComponent pixelImageComponent =
new PixelImageComponent(100,100);
f.getContentPane().add(pixelImageComponent);
pixelImageComponent.setPixel(10,10, Color.RED);
pixelImageComponent.setPixel(11,10, Color.GREEN);
pixelImageComponent.setPixel(12,10, Color.BLUE);
pixelImageComponent.setPixel(13,10, Color.CYAN);
pixelImageComponent.setPixel(14,10, Color.MAGENTA);
pixelImageComponent.setPixel(15,10, Color.YELLOW);
f.setSize(200,200);
f.setVisible(true);
}
}
class PixelImageComponent extends JPanel
{
private BufferedImage image;
public PixelImageComponent(int width, int height)
{
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(0,0,width,height);
g.dispose();
}
public void setPixel(int x, int y, Color color)
{
image.setRGB(x, y, color.getRGB());
repaint();
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
}
eher in die Richtung des gewünschten geht, aber das ist natürlich erstmal nur haltlose Spekulation, und ohne genauere Infos kann auch genau DAS wieder eine SEHR ungünstige Lösung sein…