noch ein DoubleBuffering Noob

Status
Nicht offen für weitere Antworten.
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.

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!
 

Michael...

Top Contributor
In der Regel ist bei Swing Komponenten DoubleBuffering standardmäßig gesetzt.
Explizites setzen sollte bei Dir also nicht notwendig sein.
- bei Swing überschreibt man die paintComponent(Graphics g) nicht paint(...)
- warum überschreibst Du die update(...) ?
- müssen Deine Objekte alle von JComponent erben bzw. warum zeichnest Du die Objekte nicht alle auf eine Komponente?
 
R

rapeme

Gast
danke für deine schnelle anwtort!


Explizites setzen sollte bei Dir also nicht notwendig sein. --> wird weggelassen, danke!

- bei Swing überschreibt man die paintComponent(Graphics g) nicht paint(...) --> gesagt getan

- warum überschreibst Du die update(...) ? --> weg!

- müssen Deine Objekte alle von JComponent erben bzw. warum zeichnest Du die Objekte nicht alle auf eine Komponente? --> Ich will für jedes der Objekte einen MouseListener haben und sie beliebig entfernen hinzufügen können. Bin leider noch nicht allzu vertraut mit java, vielleicht versteh ich das falsch.
 

Michael...

Top Contributor
Ich will für jedes der Objekte einen MouseListener haben und sie beliebig entfernen hinzufügen können.
Ich nehme an Du willst auch Objekte mit der Maus erreichen, die hinter anderen stecken. Hab mir Deine Komponente nicht so genau angeschaut, aber wenn Du die Objekte im Hintergrund der Komponent des obersten Objekts verdeckst (auch wenn deren Hintergrund durchsichtig ist) kommst Du doch gar nicht so einfach an diese ran.
 
R

rapeme

Gast
hab eine funktion die dafür sorgt, dass sich objekte nicht vollständig überlagern können. Mir gehts rein darum das flackern wegzubekommen und ich würde gerne jedes Objekt für sich selbst verantwortlichen haben (eigener Mouselistener, eigene paint funktion)

irgend eine Lösungsidee? (bin für alles offen)
 

Quaxli

Top Contributor
Die Idee mit dem MouseListener ist nicht gut. Verwende einen MouseListener und wenn jemand mit der Maus klickt, prüfe für alle Objekte, ob der Punkt im Objekt liegt und wende dann die gewünschte Logik an.
 

L-ectron-X

Gesperrter Benutzer
Ändere mal den Methodennamen von
Code:
paint(Graphics g)
nach
Code:
paintComponent(Graphics g)
und kommentiere deine update()-Methode mal aus.
Was passiert dann?
 
R

rapeme

Gast
dazu hat mir auch Michael... geraten. Ändert leider nichts an dem flackern :(
 
R

rapeme

Gast
zeichne jetzt alles in einer componente, jzt gibts auch nur mehr einen Mouselistener für alle Elemente, funktioniert flackerfrei! wuuhuuuu

danke für eure schnellen & hilfreichen antworten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JavaFX Mandelbrot-bild noch nicht optimiert AWT, Swing, JavaFX & SWT 7
M JavaFX kann man da noch was am code vereinfachen design technisch sieht nicht richtig aus... AWT, Swing, JavaFX & SWT 15
K Wie kann ich noch den scale bekommen, außer mit getScaleX oder getScaleY? AWT, Swing, JavaFX & SWT 1
P Swing GUI noch nicht gezeichnet - Logik läuft - blockiert AWT, Swing, JavaFX & SWT 3
P Swing Nach removeAll() noch 1 Element vorhanden AWT, Swing, JavaFX & SWT 0
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D SWT TreeViewer: Daten aus Model gelöscht... trotzdem noch im Baum AWT, Swing, JavaFX & SWT 4
B Swing Noch ein Zeichenprogramm... AWT, Swing, JavaFX & SWT 19
R Noch einmal x^2 bzw. parabel AWT, Swing, JavaFX & SWT 2
V Swing Neue Größe bei ComponentListener noch nicht verfügbar? AWT, Swing, JavaFX & SWT 3
S 3D-Grafik Java3D und was noch? AWT, Swing, JavaFX & SWT 3
T Event Dispatch Thread und noch ein Thread AWT, Swing, JavaFX & SWT 7
Nicer LookAndFeel Suche noch LaFs AWT, Swing, JavaFX & SWT 7
2 Werde Java GUIs immer noch mit dem in die Jahre gekommen Swing gemacht? AWT, Swing, JavaFX & SWT 12
M SWT Mutter-Shell blocken während Tochter-Shell noch offen ist AWT, Swing, JavaFX & SWT 6
S Swing noch nicht übergebenen Wert aus JComboBox auslesen AWT, Swing, JavaFX & SWT 4
S Swing Fenster schliessen, javaw noch im Speicher AWT, Swing, JavaFX & SWT 5
U JList mit Hintergrundbild hinterlegen und noch ne Frage AWT, Swing, JavaFX & SWT 4
S Weder ActionListener noch Graphics wollen so recht AWT, Swing, JavaFX & SWT 3
G JTree mouseClicked -> kontrolle ob noch ein unterknoten e AWT, Swing, JavaFX & SWT 2
A Noch mal Zusammenarbeit Java und HTML AWT, Swing, JavaFX & SWT 4
A Noch mals Probleme mit Login AWT, Swing, JavaFX & SWT 3
G Text eines noch aktiv editierten Textfeldes lesen AWT, Swing, JavaFX & SWT 2
H Noch einmal JList (nichts auswählen) AWT, Swing, JavaFX & SWT 2
C AWT, Swing & was sonst noch. AWT, Swing, JavaFX & SWT 11
E Toturial weg! Hat noch wer ne Kopie! AWT, Swing, JavaFX & SWT 3
U sporadisches Deadlock und noch ein Schmankerl ;) AWT, Swing, JavaFX & SWT 9
M Es bleibt immer noch eine Javaw instanz zurück AWT, Swing, JavaFX & SWT 3
H Swing nach schließen noch sichtbar AWT, Swing, JavaFX & SWT 4
T Flackern trotz DoubleBuffering AWT, Swing, JavaFX & SWT 8
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0
T 2D-Grafik Slideshow (DoubleBuffering und Image transformieren/bewegen) AWT, Swing, JavaFX & SWT 6
B Doublebuffering korrekt anwenden AWT, Swing, JavaFX & SWT 2
Dreamy Swing Mehrfaches DoubleBuffering in Swing? AWT, Swing, JavaFX & SWT 10
W DoubleBuffering nutzung? AWT, Swing, JavaFX & SWT 5
J Manual-DoubleBuffering im JPanel AWT, Swing, JavaFX & SWT 19
M zooming-Framework und doubleBuffering AWT, Swing, JavaFX & SWT 6
K noob braucht unterstützung AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben