F
Da sind einige Fehler drin.
Steuerung könnte eine nicht-statische innere Klasse von SpielFenster sein, so dass diese auf die Objekteeigenschaften des Fensters zugreifen kann (also auch auf das Ansicht-Exemplar).
public class SpielFenster
extends JFrame
{
private Steuerung st;
private Ansicht ans;
public SpielFenster()
{
//Konstruktorcode einfügen
}
public class Steuerung
extends KeyAdapter
{
@Override
public void keyPressed(KeyEvent ke)
{
if (ke.getKeyCode() == KeyEvent.VK_UP)
ans.setZeichnen(true);
}
}
}
Beim Zeichnen von Bildern sollten diese zuvor vollständig geladen werden, wozu die Klasse MediaTracker verwendet wird (oder javax.swing.ImageIcon - die dies auch übernimmt). Außerdem sollte repaint angestoßen werden, wenn sich der Zustand des Ansicht-Exemplars ändert. Ich habe das hier über eine entsprechende Setter-Methode realisiert.
public class Ansicht
extends JPanel
{
private boolean zeichnen;
Image titel;
public Ansicht()
{
titel = Toolkit.getDefaultToolkit().createImage("Titel.png");
MediaTracker mT = new MediaTracker(this);
mT.addImage(titel, 0);
try
{
mT.waitForAll();
}
catch (InterruptedException err)
{
err.printStackTrace();
}
}
public void paint(Graphics g)
{
if(isZeichnen())
g.drawImage(titel, 0, 0, this);
}
public boolean isZeichnen()
{
return zeichnen;
}
public void setZeichnen(boolean zeichnen)
{
this.zeichnen = zeichnen;
repaint();
}
}