folgendes programm ist gegeben:
dieses programm erzeugt ein fadenkreuz dort wo man mit der maus hinklickt.
wenn man die maus gedrückt hält folgt das fadenkreuz der maus.
lässt man die maustaste los, so bleibt das fadenkreuz auf seiner position stehen.
klickt man wo anders hin, wird der sichtbare inhalt des bildschirms gelöscht und ein fadenkreuz ensteht an der stelle wo man mit der maus hingeklickt hat.
(fadenkreuz = ein kreuz aus einer senkrechten und einer waagerechten linie, die über das ganze fenster gehen)
(hinweis: das fadenkreuz können sie aus rechtecken zusammenfassen).
ich hab da nun mal ne frage zur paint methode:
dies hier bewirkt ja, dass das fadenkreuz neugezeichnet wird und die alten fadenkreuze "gelöscht" werden. in wirklichkeit werden sie aber nur hinter dem rechteck versteckt,dass
durch g.fillRect(...) erzeugt wird.
gibt es eine andere möglichkeit, wie man die fadenkreuze auch wirklich löschen könnte und sie nicht einfach nur versteckt?
dieses programm erzeugt ein fadenkreuz dort wo man mit der maus hinklickt.
wenn man die maus gedrückt hält folgt das fadenkreuz der maus.
lässt man die maustaste los, so bleibt das fadenkreuz auf seiner position stehen.
klickt man wo anders hin, wird der sichtbare inhalt des bildschirms gelöscht und ein fadenkreuz ensteht an der stelle wo man mit der maus hingeklickt hat.
(fadenkreuz = ein kreuz aus einer senkrechten und einer waagerechten linie, die über das ganze fenster gehen)
(hinweis: das fadenkreuz können sie aus rechtecken zusammenfassen).
Java:
public class Main
{
public static void main(String[] a)
{
new MyFrame();
}
}
Java:
import javax.swing.JFrame;
public class MyFrame extends JFrame
{
MyFrame()
{
getContentPane().add(new Zeichenflaeche());
setLocation(100, 100);
setSize(400, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
}
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JPanel;
public class Zeichenflaeche extends JPanel
{
Point a;
Zeichenflaeche()
{
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent m)
{
a = m.getPoint();
repaint();
}
});
addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseDragged(MouseEvent m)
{
a = m.getPoint();
repaint();
}
});
}
public void paint(Graphics g)
{
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
if(a!= null)
zeichneRechteck(g, a);
}
public void zeichneRechteck(Graphics g, Point a)
{
g.setColor(Color.blue);
g.drawRect(-1 , -1, (int)a.getX()+1, (int)a.getY()+1);
g.drawRect( (int)a.getX(), (int)a.getY(), getWidth()-(int)a.getX()+1, getHeight()-(int)a.getY()+1);
}
}
ich hab da nun mal ne frage zur paint methode:
Java:
public void paint(Graphics g)
{
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight()); // "löscht" alte fadenkreuze
if(a!= null)
zeichneRechteck(g, a); //zeichnet neues fadenkreuz
}
dies hier bewirkt ja, dass das fadenkreuz neugezeichnet wird und die alten fadenkreuze "gelöscht" werden. in wirklichkeit werden sie aber nur hinter dem rechteck versteckt,dass
durch g.fillRect(...) erzeugt wird.
gibt es eine andere möglichkeit, wie man die fadenkreuze auch wirklich löschen könnte und sie nicht einfach nur versteckt?
Zuletzt bearbeitet: