2D-Grafik Wieso wird das Bild nicht angezeigt ?

Pommes9485

Bekanntes Mitglied
Guten Tag,

einfach Frage, hier der Code :
Java:
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Bilder extends JFrame
{   
  boolean fenster =false;
Image fen = Toolkit.getDefaultToolkit().getImage( "fen.jpg" );
  MouseListener mouse = new MouseListener(){
    
                public void mouseEntered(MouseEvent e){
                if(e.getX()<450 && e.getX()>50 && e.getY()<500 && e.getY()>400 )
                {
                   System.out.println("Entered");
                   fenster=true;
                   repaint();
               
                }
                }
            public void mouseExited(MouseEvent e) {
               
                    System.out.println("Exited");
               fenster = false;
               repaint();
           
            }
            
                public void mouseReleased(MouseEvent e){}
                public void mousePressed(MouseEvent e){}
                public void mouseClicked(MouseEvent e){
             
        }
    };    
    public Bilder()
    {
        addMouseListener(mouse);
        setSize(500,500);
        setVisible(true);

    }
    public void paint(Graphics g)
    {
        g.setColor(Color.WHITE);
        g.fillRect(0,0,500,500);  
        if(fenster)
        {
        g.drawImage(fen,0,500,500,400,this);
        
        }
    }
    
    
   

}

Wieso wird nicht angezeigt ? Wenn ich das g.drawImage mit einem g.fillRect ersetze gehts auch ...
Daher stimmt die Position wahrscheinlich nicht, aber wie wäre sie richtig ? Das Bild ist 100 Hoch und 2000 Breit, damit man es auch vergrößern kann^^
Was ist zu tun ?
 
In Swing überschreibt man die paintComponent Methode. Allerdings in der Regel von einem JPanel, ins zeichnen des JFrames sollte man nicht eingreifen.
Wird das Bild denn richtig geladen?
 
Mal abgesehen von der Art der Implementierung sind hier im Code zwei Probleme:
Java:
...
                public void mouseEntered(MouseEvent e){
                if(e.getX()<450 && e.getX()>50 && e.getY()<500 && e.getY()>400 )
...
        setSize(500,500);
...

    public void paint(Graphics g)
...
        g.drawImage(fen,0,500,500,400,this);
1. das Erfüllen der Bedinung ist nur möglich, wenn die Maus von unten den Frame "betritt" oder der Anwender die Maus im unteren Bereich ganz schnell von rechts oder links "reinzieht". Das kann ja eventuell so gewollt sein, ist m.M. sehr unglücklich implementiert.
2. dann würde das Bild (sofern korrekt geladen) eventuell sogar angezeigt werden, allerdings sieht man halt nichts, da der Frame ingesamt 500 Pixel hoch ist, das Bild aber erst bei y = 500 positioniert ist, also irgendwo unterhalb der Frame liegt.
 
Danke, es lag wohl an der Positionierung, hatte das ganz übersehen. Aber wie würdest du denn die Bedingung schreiben bzw wo liegt der Denk fehler ? Es stimmt was du sagts, ich weis nur nicht wieso ...
 
Grundsätzlich würde ich nicht die paint des JFrames überschreiben, sondern den Vorschlag von EikeB befolgen ;-)
Aber wie würdest du denn die Bedingung schreiben bzw wo liegt der Denk fehler ? Es stimmt was du sagts, ich weis nur nicht wieso ...
mouseEntered wir nur beim "Betreten" der Komponente ausgelöst und da ist die Maus nicht unbedingt in dem abgefragten Bereich.

Ich weiss ja nicht was genau Du vorhast. Ich nehme mal an das Bild soll, wenn der Maus Cursor einen bestimmten Bereich "betritt" und ausgeblendet und wenn er ihn wieder verlässt ausgeblendet werden. Das könnte man mit einem MouseMotionListener und der mouseMoved(...) überprüfen - zur Sicherheit noch mit mouseExited arbeiten, falls der Anwender die Maus zu schnell aus der gesamten Komponente zieht.
Alternativ könnte man an diese Position eine Komponente mit MouseListener platzieren und einfach nur auf mouseEntered und mouseExited reagieren.
 

Zurück
Oben