Wątek przeniesiony 2015-05-12 09:57 z Java przez bogdans.

Rysowanie obrazka metodą paintComponent nie działa prawidłowo

0

Witam. Nie rozumiem dlaczego ale nie moge narysowac obrazka. Metoda paint component robi tlo biale ale obrazek sie nie rysuje.

public class Grafiki extends JPanel{
    public BufferedImage samolot;

    Grafiki() {
        super();
        try {      
            samolot = ImageIO.read(new File("Samolot.jpg"));
        } catch (IOException ex) {
        }
        setPreferredSize(new Dimension(800, 600));
    }
    
    public void paintComponent(Graphics g) {
        super.setBackground(Color.WHITE);
        super.paintComponent(g); 
        g.drawImage(samolot, 0, 0, this);
    }
}

public class MojPanel extends JPanel{
    Grafiki dp = new Grafiki();
    MojPanel(){       
        dp.paintComponents(null);
        add(dp);
    }
    
}

public class Ramka extends JFrame{
    public static final int SZEROKOSC = 800;
    public static final int WYSOKOSC = 600;
    Ramka(){
        JFrame Kalkulator = new JFrame("Kalkulator");
        Kalkulator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Kalkulator.setSize(SZEROKOSC, WYSOKOSC);
        MojPanel mp = new MojPanel();
        Kalkulator.getContentPane().add(mp) ;
        Kalkulator.setVisible(true);
    }
}

public class Gra {
    
    public static void main(String[] args) {
        Ramka ramka = new Ramka();
    }
}
0

Prawie na pewno nie powiodło się odczytanie obrazka (źle podałeś ścieżkę).

        try {      
            samolot = ImageIO.read(new File("Samolot.jpg"));
        } catch (IOException ex) {
            //Tu koniecznie dodaj wyświetlenie informacji o rodzaju błędu
            //minimum, to System.out.println(ex);
        }

Uwaga na przyszłość, zostawanie "pustej" obsługi błędów w źle działającym programie, to głupota.

0

javax.imageio.IIOException: Can't read input file!
Ach no tak zapomnialem o tym. Masz racje wyrzuca wyjatek tylko nie wiem dlaczego Samolot.jpg znajduje sie w src po prostu bez zadnego folderu

1

Folder src to jedno z głupszych miejsc na umieszczanie plików graficznych - przecież użytkownik programu nie będzie miał ani tego folderu, ani żadnych plików, które się w nim znajdują. Lepszym kandydatem (też złym) jest folder bin.
Jeśli tak podajesz ścieżkę

samolot = ImageIO.read(new File("Samolot.jpg"));

to plik Samolot.jpg jest czytany z folderu bieżącego. Folder bieżący możesz wyświetlić tak:

System.out.println(System.getProperty("user.dir"));

(Prawie na pewno jest to folder projektu).

0

Tak to folder projektu nie wiem dlaczego szukajac w necie kazdy pisal ze to folder src. Problem rozwiazany dzieki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1