Frage zu Double Buffering

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi, ich habe drei Klassen geschrieben. Eine davon beinhaltet eine Komponente, die man verschieben kann. Eine zweite einen DoubleBuffering Manager. Die dritte ruft das ganze dann auf. Allerdings bringt der Double Buffering Manager nicht seinen Dienst. Ich habe die Dateien einmal hochgeladen:

http://www.file-upload.net/download-297253/Klassen.rar.html


Vielen Dank schon einmal für die Hilfe.
 

André Uhres

Top Contributor
Hast du irgendwelche Erklärungen zum Programmablauf?
Und wieso benutzt du keinen MouseMotionListener für das Verschieben?
 
G

Guest

Gast
Danke erstmal für die schnelle Antwort. MosueMotationListener habe ich zuerst versucht. Das ganze war aber nochs chlimemr vom Ruckeln her. Die Lösung mit dem Thread fand ich besser, da ich ja mehrere dieser Komponenten habe. Hier der Programmablauf:

- TestFrame ist klar. Es werden eine Menge parameter übergeben, da sie eigentlich abstrakt ist. Aber aufgrund vieler Tests ist sie das im Moment noch nicht.

- AbstractAccessories soll später einen Gegenstand wie eine Lampe o.ä darstellen. Daher auch ein Image. Movable bezeichnet den Status, ob der Thread verschieben und repainten soll oder nicht. Ist allerdings usable deaktiviert lässt sich erst gar nichts verschieben.

- DoubleBufferedPanel ist eigentlich ein Manager. Ihn habe ich geschirben um ein Array von Buffer zu haben, damit ich mir n Backbuffer erstellen kann. Sonst hat er nur die Funktion "showNextPanel()", welche dafür sorgt, dass der BackBuffer mit dem FrontBuffer ausgetauscht wird. Die Buffer selbst werden über Accessfunktionen aufgerufen, bzw. direkt. Die Integervariablen actualPanel und nextPanel sind die Indexwerte der Buffer.

Ich hoffe ich konnte dir das Grobe erklären. Vielen Dank für die Hilfe!
 
G

Guest

Gast
Dankeschön, der Quellcode ist um einiges besser! Ich werde es dann mal für meine Klasse umschreiben. Vielen Dank nochmal! Aber was habe ich falsch gemacht? Warum flackert das trotz DoubleBuffering?

//Edit: Jetzt habe ich noch ein Problem mit dem PopupMenü. Ich habe deinen Code umgeschrieben und er funktioniert wunderbar. Aber er zeigt kein PopupMenü mehr an. Da es nur eine Klasse ist, poste ich mal hier

Code:
/*
 * PComponent.java
 *
 * Created on 9. Juni 2007, 14:16
 *
 * @author                  Felix Pultar
 *
 * @param  name:            Name of the component
 * @param  componentRight:  Component connected at right
 * @param  componentLeft:   Component connected at left
 * @param  hitComponent:    Represents the pressed component
 * @param  parent:          Container of the component
 * @param  components:      All components which are not connected
 * @param  usable:          Is the component usable?
 * @param  x, y:            X- and Y-Position of the component
 * @param  iconPath:        Path of the showed icon
 * @param  totalComponents: Total of all components
 */

/**
 * This is a real abstract
 * physical component
 */

import com.illu.physis.components.interfaces.IPComponent;
import javax.swing.JLabel;
import javax.swing.JPopupMenu;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.ImageIcon;
import java.awt.Container;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseEvent;

public class PComponent extends JLabel implements IPComponent {
    
    public String name;
    private PComponent componentRight, componentLeft, hitComponent;
    private PTable parent;
    private boolean usable;
    private int x, y, deltaX, deltaY, height, width;
    private String iconPath;
    
    /*
     * Builds new instances of PComponent while usable is always true
     */
    
    public PComponent( PTable parent, String name, String iconPath, int x, int y, int height, int width ) {
        super( new ImageIcon( iconPath ) );
        
        this.parent = parent;
        this.name = name;
        this.iconPath = iconPath;
        this.x = x;
        this.y = y;
        this.height = height;
        this.width = width;
        this.usable = true;
        
        setBounds( x, y, height, width );
        
        parent.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(final MouseEvent evt) {
                move( evt );
            }
        });
        parent.addMouseListener(new MouseAdapter() {
            public void mousePressed(final MouseEvent evt) {
                enableDragging( evt );
            }
            public void mouseReleased(final MouseEvent evt) {
                disableDragging( evt );
            }
        });
        
    }
    
    /*
     * Builds new instances of PComponent while usable is the wished state
     */
    
    public PComponent( PTable parent, String name, String iconPath, int x, int y, int height, int width, boolean usable ) {
        super( new ImageIcon( iconPath ) );
        
        this.parent = parent;
        this.name = name;
        this.iconPath = iconPath;
        this.x = x;
        this.y = y;
        this.height = height;
        this.width = width;
        this.usable = usable;
        
        setBounds( x, y, height, width );
        
        parent.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(final MouseEvent evt) {
                move( evt );
            }
        });
        parent.addMouseListener(new MouseAdapter() {
            public void mousePressed(final MouseEvent evt) {
                enableDragging( evt );
            }
            public void mouseReleased(final MouseEvent evt) {
                if( evt.isPopupTrigger() ) {;
                    createMenu().show( evt.getComponent(), evt.getX(), evt.getY() );
                }
                else {
                    disableDragging( evt );
                }
            }
        });
        
    }
    
    public void enableDragging( MouseEvent evt ) {
        if( evt.isPopupTrigger() ) {
            createMenu().show( evt.getComponent(), evt.getX(), evt.getY() );
        }
        else {
            Component c = parent.getComponentAt(evt.getPoint());
            if ( c instanceof PComponent ) {
               hitComponent = (PComponent) c;
               deltaX = evt.getX() - hitComponent.getX();
               deltaY = evt.getY() - hitComponent.getY();
            }
        }
    }
    
    public void disableDragging( MouseEvent evt ) {
        if( evt.isPopupTrigger() ) {
            createMenu().show( evt.getComponent(), evt.getX(), evt.getY() );
        }
        else {
            if( hitComponent != null ){
            parent.repaint();
            hitComponent = null;
            }
        }
    }
        
    
    public void move( MouseEvent evt ) {
        if ( hitComponent != null ) {
            int x = evt.getX() - deltaX;
            int y = evt.getY() - deltaY;
            hitComponent.setLocation( x, y );
            parent.setComponentZOrder( hitComponent, 0 );
            parent.repaint();
        }
    }
    
    /*
     * Creates a new PopupMenu, when it is needed
     */
    
    private JPopupMenu createMenu() {
        JPopupMenu popUpMenu = new JPopupMenu();
        JMenu connectTo = new JMenu( "Verbinden zu" );
        JMenu disconnectTo = new JMenu( "Trennen von" );
        JMenuItem showDialog = new JMenuItem( "Eigenschaften" );
        JMenuItem[] components = new JMenuItem[ parent.totalComponents ];
        for( int i = 0; i < parent.totalComponents; i++ ) {
            components[ i ] = new JMenuItem( parent.components[ i ].name );
            connectTo.add( components[ i ] );
        }
        if( componentLeft == null ) {
            disconnectTo.add( new JMenuItem( "Keine Angabe" ) );
        }
        else {
            disconnectTo.add( new JMenuItem( componentLeft.name ) );
        }
        if( componentRight == null ) {
            disconnectTo.add( new JMenuItem( "Keine Angabe" ) );
        }
        else {
            disconnectTo.add( new JMenuItem( componentRight.name ) );
        }
        popUpMenu.add( connectTo );
        popUpMenu.add( disconnectTo );
        popUpMenu.add( showDialog );
        
        return popUpMenu;
    }
    
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
G Frage zu processMouseEvent AWT, Swing, JavaFX & SWT 6
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
D Swing implementierungs-technische Frage zu JList/AbstractListModel AWT, Swing, JavaFX & SWT 7
C Event Frage AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
F Frage zu WindowListeners AWT, Swing, JavaFX & SWT 2
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
C Frage zu ActionListenern AWT, Swing, JavaFX & SWT 7
D Frage @ someActionEvent.getActionCommand() AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18

Ähnliche Java Themen

Neue Themen


Oben