Bild wird nicht angezeigt



  • Hi!
    Ich weiss nicht wieso das nicht klappt vielleicht könnt ihr mir ja helfen.
    Ich will einfach nur das wenn man die UP Taste drückt ein Bild angezeigt wird. Die Steuerung klappt auch hab das mit System.out. getestet.

    Aber es wird nicht angezeigt. Hier mal die Klassen:

    Fenster:

    public class SpielFenster extends JFrame{
    	Steuerung  st;
    	Ansicht ans;
    
    	public SpielFenster()
    	{
    		setSize(new Dimension(640,480));
    		setTitle("Bildtest");
    		setVisible(true);
    		setLocation(300,300);
    
    		st = new Steuerung();
    		this.addKeyListener(st);
    	    ans = new Ansicht();
            add(ans);
    	}
     }
    

    Steuerung:

    public class Steuerung implements KeyListener
    {
    public boolean hoch=false;
    
    @Override
    	public void keyPressed(KeyEvent ke) {
    		switch(ke.getKeyCode())
    		{
    			case KeyEvent.VK_UP:
    				hoch=true;
    				System.out.println("OBEN");
    				break;
    		}
    	}
    
    	@Override
    	public void keyReleased(KeyEvent ke) {
    		switch(ke.getKeyCode())
    		{
    		case KeyEvent.VK_UP:
    			hoch=true;
    			break;
    
    		}
    	}
    
    	@Override
    	public void keyTyped(KeyEvent ke) {}
    }
    

    Bild anzeigen:

    public class Ansicht extends JPanel
    {
    	Steuerung steuerung = new Steuerung();
    	Image Titel = Toolkit.getDefaultToolkit().getImage("Titel.png");
    
    	 public void paint(Graphics g)
    	    {
    		if(steuerung.hoch==true)g.drawImage(Titel, 0, 0,  this);
    		}	
    
    }
    


  • Dein Steuerung-Objekt im Panel und im Frame sind nicht dasselbe...



  • 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();
            }  
        }
    

Anmelden zum Antworten