Hallo,
zeichnen kann zwar dieses kleine Malprogramm, aber es gelingt mir nicht bei gedrückter Maustaste eine durchgehende Linie zu zeichnen. Mit der Methode getfillOval () wird die Linie um so brüchiger je schneller die Maus bewegt wird.
Könnte das Problem mit Buffering gelöst werden? Ich habe dazu ein Stück Code gefunden, nur weiß ich nicht wie ich es in mein Programm integrieren soll:
So sieht mein Code aus:
Danke im Voraus...
zeichnen kann zwar dieses kleine Malprogramm, aber es gelingt mir nicht bei gedrückter Maustaste eine durchgehende Linie zu zeichnen. Mit der Methode getfillOval () wird die Linie um so brüchiger je schneller die Maus bewegt wird.
Könnte das Problem mit Buffering gelöst werden? Ich habe dazu ein Stück Code gefunden, nur weiß ich nicht wie ich es in mein Programm integrieren soll:
Code:
private Image buffer = null;
private Graphics bufferGraphics = null;
public Image getBuffer()
{
if( this.buffer == null )
{
this.buffer = this.createImage( this.getWidth(), this.getHeight() );
}
return this.buffer;
}
public Graphics getBufferGraphics()
{
if( this.bufferGraphics == null )
{
this.bufferGraphics = this.getBuffer().getGraphics();
}
return this.bufferGraphics;
}
Die Zeichenmethode zeichnet dann zuerst in den Buffer, der dann anschließend in das gezeigte
Graphics-Objekt kopiert wird. Danach wird das Graphics-Objekt gezeichnet:
private void paintPoint(int x, int y)
{
Graphics tmpg = this.getBufferGraphics();
tmpg.setColor( Color.WHITE );
tmpg.fillOval(x,y,5,5);
Graphics gr = this.getGraphics();
gr.drawImage( getBuffer(), 0,0, this );
this.paint(gr);
}
So sieht mein Code aus:
Code:
public class Paint extends Frame{
TextField tRot = new TextField ();
TextField tGrün = new TextField ();
TextField tBlau = new TextField ();
TextField tGröße = new TextField ();
Label lRot = new Label ("Rot: ");
Label lGrün = new Label ("Grün: ");
Label lBlau = new Label ("Blau: ");
Label lGröße = new Label ("Größe: ");
Button bOk = new Button ("OK");
Button bLöschen = new Button ("Löschen");
Panel panel = new Panel ();
Color c = new Color (229 ,229,229);
Color c1 = new Color (50,205,50);
private int oldx, oldy;
private int x, y;
private boolean dragged = false;
private boolean lastPointPainted = true;
Paint () {
super ("Paint2");
setLayout(null);
setLocation (100,70);
setSize (1050,650);
setBackground(c);
setResizable(true);
this.add(panel, new Insets (2,50,4,5));
panel.setBounds(125, 75, 900,500);
panel.setBackground(Color.WHITE);
lRot.setBounds(180,605, 25, 20);
tRot.setBounds(210,605, 40, 20);
lGrün.setBounds(290,605, 35, 20);
tGrün.setBounds(330, 605, 40, 20);
lBlau.setBounds(410,605, 40, 20);
tBlau.setBounds(450, 605, 40, 20);
lGröße.setBounds(680,605, 40, 20);
tGröße.setBounds(728, 605, 40, 20);
bOk.setBounds(800, 605, 50, 20);
bLöschen.setBounds(880, 605, 80, 20);
add(lRot);
add(tRot);
add(lGrün);
add(tGrün);
add(lBlau);
add(tBlau);
add(lGröße);
add(tGröße);
add(bOk);
add(bLöschen);
//pack ();
setVisible(true);
panel.addMouseListener(new MouseAdapter (){
public void mouseClicked (MouseEvent me){
int x = me.getX();
int y = me.getY();
repaint ();
}});
panel.addMouseMotionListener(
new MouseMotionAdapter (){
public void mouseDragged (MouseEvent e){
oldx = x;
oldy = y;
x = e.getX();
y = e.getY();
Graphics g = panel.getGraphics();
g.setColor(Color.RED);
g.fillOval(oldx,oldy,2,2);
repaint ();
}} );
}
public void paint(Graphics g) {
Graphics e = panel.getGraphics();
e.setColor(Color.RED);
e.fillOval(x+1,y+1, 2, 2); }
public Insets getInsets (){
return new Insets (60,100,0,50);
}
public static void main (String []args){
new Paint ();}
}
Danke im Voraus...