R
rapeme
Gast
Hallo!
Programmier gerade ein JApplet welches es ermöglichen soll Kreise und Vierecke zu erstellen und diese beliebig auf dem Bildschirm zu verschieben. Soweit so gut....
Doch entsteht bei mir ein Flackern bei meinen Kreisen. Diese werden von JComponent abgeleitet da bis auf den Kreis alles mit transparenten pixeln gefüllt sein soll um die Objekte darunter zu sehen.
und hier paint funktion ohne double buffering, pixel bleiben transparent
und hier paint funktion mit double buffering, pixel nicht mehr transparent, flackern besteht auch weiterhin!!
Falls sich wer mit dem Problem auskennt, bitte hilf mir!
Programmier gerade ein JApplet welches es ermöglichen soll Kreise und Vierecke zu erstellen und diese beliebig auf dem Bildschirm zu verschieben. Soweit so gut....
Doch entsteht bei mir ein Flackern bei meinen Kreisen. Diese werden von JComponent abgeleitet da bis auf den Kreis alles mit transparenten pixeln gefüllt sein soll um die Objekte darunter zu sehen.
Java:
public class ObjectMoveableOval extends JComponent implements MouseInputListener {
private int mPosx, mPosy = 0;
private int mDiameter;
private int mPressPosx, mPressPosy;
private boolean mPressOut = false;
private Rectangle mRect;
private Image mBackbuffer_Image;
private Graphics mBackBuffer_Graphics;
public ObjectMoveableOval(int diameter) {
this.setDoubleBuffered(true);
this.setOpaque(true);
this.setBounds(mPosx, mPosy, diameter, diameter);
addMouseMotionListener(this);
addMouseListener(this);
}
//MouseInputListener Functions
public void mousePressed(MouseEvent e) {
mPressPosx = e.getX();
mPressPosy = e.getY();
if (this.contains(e.getX(), e.getY())) {
mApplet.setComponentZOrder(this, 0);
updateLocation(e);
} else {
mPressOut = true;
}
}
public void mouseDragged(MouseEvent e) {
if (!mPressOut) {
updateLocation(e);
} else {
}
}
public void mouseReleased(MouseEvent e) {
if (this.contains(e.getX(), e.getY())) {
updateLocation(e);
} else {
mPressOut = false;
}
this.repaint();
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
}
//ENDE MouseInputListener Functions
public void updateLocation(MouseEvent e) {
mPosx += e.getX() - mPressPosx;
mPosy += e.getY() - mPressPosy;
this.setLocation(mPosx, mPosy);
}
//weiterführung im nächsten Code stück
und hier paint funktion ohne double buffering, pixel bleiben transparent
Java:
@Override
public void update(Graphics g) {
paint(g);
}
@Override
public void paint(Graphics g) {
g.setColor(mBorderColor);
g.fillOval(0, 0, mDiameter, mDiameter);
g.setColor(mColor);
g.fillOval(1, 1, mDiameter - 2, mDiameter - 2);
}
}
und hier paint funktion mit double buffering, pixel nicht mehr transparent, flackern besteht auch weiterhin!!
Java:
@Override
public void update(Graphics g) {
paint(g);
}
@Override
public void paint(Graphics g) {
if(mBackbuffer_Image == null)
mBackbuffer_Image = createImage(mDiameter, mDiameter);
if(mBackbuffer_Image!= null)
mBackBuffer_Graphics = mBackbuffer_Image.getGraphics();
mBackBuffer_Graphics.setColor(mColor);
mBackBuffer_Graphics.fillOval(0, 0, mDiameter, mDiameter);
g.drawImage(mBackbuffer_Image, 0, 0, this);
}
}
Falls sich wer mit dem Problem auskennt, bitte hilf mir!