# Appletviewer hat Grafikbugs!



## Ro0kie (15. Mai 2011)

Liebes Java-Forum.org! 

Ich hab jedes mal egal welches Applet ich ausführe,sowohl in Netbeans als auch in Eclipse, einen Grafikfehler im Appletviewer, die nicht an meinem Code liegen,weil komischerweise die GUI immer einwandfrei läuft. :bahnhof:
Des öfteren stürtzt auch einmal der Grafikkartentreiber ab.Ich habe eine ATI HD 5770
Irgendwelche Lösungsvorschläge ?,Grafikartentreiber ist am neuersten Stand(11.4). 

Beispiele :











Danke im vorhinein. 

MfG Ro0kie


----------



## SlaterB (15. Mai 2011)

was meinst du mit 'die GUI funktioniert', geht dein Programm als JFrame ausgeführt?
wie kannst du grundsätzlich sicher sein, dass nicht deine Programme Fehler enthalten?

hast du die Viewer bereits mit rein aus dem Internet kopierten Beispielen getestet?


----------



## Ro0kie (15. Mai 2011)

SlaterB hat gesagt.:


> was meinst du mit 'die GUI funktioniert', geht dein Programm als JFrame ausgeführt?


GUI (=Graphic User Interface) sprich Desktop-Applikation bzw. JFrame 



SlaterB hat gesagt.:


> wie kannst du grundsätzlich sicher sein, dass nicht deine Programme Fehler enthalten?


Weil das Applet in der init()-Methode einfach nur eine Referenz auf eine Panel-Klasse hat genau wie die GUI.




SlaterB hat gesagt.:


> hast du die Viewer bereits mit rein aus dem Internet kopierten Beispielen getestet?


Nein wie geht das ?


----------



## SlaterB (15. Mai 2011)

Ro0kie hat gesagt.:


> Weil das Applet in der init()-Methode einfach nur eine Referenz auf eine Panel-Klasse hat genau wie die GUI.


und das kann man nicht falsch machen? ich bin mir nicht sicher ob ich dabei weiterhelfen kann, 
aber poste doch mal ein simples Beispiel einer solchen GUI einerseits, und was für ein Applet du daraus machst



> Nein wie geht das ?


du kannst selber Applets schreiben, aber vorhandene aus dem Internet nicht bei dir irgendwo ganz normal kopieren, als Klasse definieren usw. und ausführen?

ich meinte keine komplizierten neuen Optionen, einfach nur verlässlichen Code verwenden


----------



## Ro0kie (15. Mai 2011)

SlaterB hat gesagt.:


> und das kann man nicht falsch machen? ich bin mir nicht sicher ob ich dabei weiterhelfen kann,
> aber poste doch mal ein simples Beispiel einer solchen GUI einerseits, und was für ein Applet du daraus machst



Beispiel für eine GUI:

```
import javax.swing.JFrame;
import java.awt.*;
/**
 *Spiel für die Langeweile.
 * Durch drücken einzelner Buttons wird eine Spielfigur bewegt.
 * Ziel des Spieles gibt es keines.
 *
 * @author Martin S
 * @version 2011-02-24
 */
public class BallspielGUI extends JFrame {
        /**
     *Standard-Main Methode
     *
     * @param args
     */
    public static void main(String[] args){
         new BallspielGUI();
    }

    /**
     *Standard-Konstruktor zum setzen der Fenstergröße,Name,Schließ-Aktion
     * und der Sichtbarkeit.
     */
    public BallspielGUI(){
        //Titelzeile setzen
        setTitle("Football");

        //Schließ-Aktion setzen
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //ZiffernanzeigePanel einfügen
        Container Con = this.getContentPane();
        Con.add(new BallspielPanel());

        //Sichtbarkeit des Fensters einstellen
        setVisible(true);

        //Fixe Fenstergröße setzen
        setSize(500,550);
        setResizable ( false );



    }
}
```

und eins fürs Applet :

```
import javax.swing.JApplet;

/**
 * Applet für das Ballspiel.
 *
 * @author Martin S
 * @version 2011-05-07
 */
public class BallspielApplet extends JApplet {

    /**
     * Initialisierungs Methode die aufgerufen wird,
     * nachdem das Applet in den Browser geladen worden ist.
     */
    public void init() {
        add(new BallspielPanel());
          //Fixe Fenstergröße setzen
    setSize(500,550);
    
    }

}
```

Falls ihr noch das Panel braucht :

```
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/**
 *Panel für die Ballspiel-Applikation .
 *
 * @author Martin S
 * @version 2011-02-24
 */
public class BallspielPanel extends JPanel {

    private Button east, west, south, north;
    private JLabel ball;
    private ImageIcon icon;
    private JPanel panel;
    private int x, y, width, height;

    /**
     * Standard-Konstruktor zum deklarieren,initaliserien und hinzufügen der
     * GUI-Elemente.
     */
    public BallspielPanel() {
        //Ball Int-Variablen init.
        x = 5;
        y = 30;
        width = 75;
        height = 75;

        //Layout setzen
        setLayout(new BorderLayout());


        //Spielfigur init.
       /**
         * Methoden aus der Java-API
         */
        icon = new ImageIcon(BallspielPanel.class.getResource("fball.png"));
        ball = new JLabel(icon);
        ball.setBounds(x, y, width, height);





        //Buttons init. und hinzufügen
        east = new Button("O");
        west = new Button("W");
        south = new Button("S");
        north = new Button("N");

        add(east, BorderLayout.EAST);
        add(west, BorderLayout.WEST);
        add(south, BorderLayout.SOUTH);
        add(north, BorderLayout.NORTH);

        //Panel init. und hinzufügen

        //Panel
        panel = new JPanel();
        panel.setLayout(null);
        panel.add(ball);
        add(panel);

        ////ActionListener Objekt erzeugen
        BallspielAction h = new BallspielAction();
        east.addActionListener(h);
        west.addActionListener(h);
        south.addActionListener(h);
        north.addActionListener(h);
    }

    /**
     *Innere Klasse, für die einzelnen Aktionen.
     *
     */
    private class BallspielAction implements ActionListener {

        /**
         * Methode,für die einzelen Buttonklicks,usw... .
         *
         * @param e
         */
        public void actionPerformed(ActionEvent e) {

            //Ballsteuereung erstellen

            if (e.getSource() == east) {

                //Begrenzung rechts
                if (x + 50 < panel.getWidth() - 75) {
                    ball.setBounds(x = x + 75, y, width, height);
                }
            }

            if (e.getSource() == west) {

                //Begrenzung links
                if (x > 75) {
                    ball.setBounds(x = x - 50, y, width, height);
                } else {
                    ball.setBounds(0, y, width, height);
                    x = 0;
                }
            }

            if (e.getSource() == north) {

                //Begrenzung oben
                if (y > 50) {
                    ball.setBounds(x, y = y - 50, width, height);
                } else {
                    ball.setBounds(x, 0, width, height);
                    y = 0;
                }
            }

            //Begrenzung unten
            if (e.getSource() == south) {
                if (y + 50 < panel.getHeight() - 75) {
                    ball.setBounds(x, y = y + 50, width, height);
                } else {
                    ball.setBounds(x, panel.getHeight() - 75, width, height);
                    y = panel.getHeight() - 75;
                }
            }




        }
    }
}
```


----------



## SlaterB (15. Mai 2011)

ich denke, ans Ende des Listeners gehört 
panel.repaint();

dann könnten die Fehler für dieses Beispiel weggehen, 
warum du sie aber nur im Applet und nicht im JFrame hast, kann ich nicht sagen, und das ganze nichtmal testen


----------

