Nie wyświetlające się obrazki

0

Witam. Zaczynam bawić się Swingiem i mój problem wygląda tak, że nie wyświetlają mi się jakiekolwiek obrazki. Oto przykładowy kod (dodawanie obrazka do "panelu zachodniego"), trzy pliki:

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

public class Program {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                Ramka frame = new Ramka();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

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

public class Ramka extends JFrame {

    public Ramka() {

        setSize(500, 400);

        JPanel panelPolnocny = new JPanel();
        JPanel panelPoludniowy = new JPanel();
        JPanel panelWschodni = new JPanel();
        JPanel panelZachodni = new JPanel();
        JPanel panelCentralny = new JPanel();

        panelPolnocny.setBackground(Color.RED);
        panelPoludniowy.setBackground(Color.BLUE);
        panelWschodni.setBackground(Color.CYAN);
        panelZachodni.setBackground(Color.GREEN);
        panelCentralny.setBackground(Color.BLACK);
        
        ImageComponent1 component = new ImageComponent1();
        panelZachodni.add(component);
        
        add(panelPolnocny, BorderLayout.NORTH);
        add(panelPoludniowy, BorderLayout.SOUTH);
        add(panelWschodni, BorderLayout.EAST);
        add(panelZachodni, BorderLayout.WEST);
        add(panelCentralny, BorderLayout.CENTER);
    }
}

import java.awt.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class ImageComponent1 extends JComponent {
    
    Image image;

    public ImageComponent1() {

        try {
            image = ImageIO.read(new File("obrazek.png"));
        }
        catch (IOException e) {
        }
    }

    public void paintComponent(Graphics g) {

        if(image == null) return;
        g.drawImage(image, 0, 0, null);
    }
}

Kodzę pod NB. Plik "obrazek" jest wrzucony do odpowiedniego katalogu. Any idea ?

0
  1. Obrazek jest wrzucony do odpowiedniego katalogu, tzn. do którego?
  2. Po coś jest ta obsługa wyjątków, chociaż po to by programista wiedział co poszło źle. To co niżej, to minimum.
        catch (IOException e) {
            System.out.println(e).
        }
0

Obrazek jest wrzucony do katalogu images w katalogu src (o ile pamiętam, teraz jestem w robocie i nie mam do tego dostępu). Wyświetla się w "drzewku" po lewej stronie w NB, więc wydaje mi się że jest dobrze umieszczony.

0

musisz wywołać mniej więcej coś takiego:

 image = ImageIO.read(new File(class.getResource("obrazek.png"));
0

@maszynaz, nie musi.
Czytasz obrazek tak:

image = ImageIO.read(new File("obrazek.png"));

tzn. obrazek musi być w katalogu bieżącym. Jaki jest katalog bieżący możesz się dowiedzieć tak:

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

Katalog bieżący przy uruchamianiu w NB zależy od własności projektu, czy masz osobne katalogi na źródła i klasy (bin, src), czy masz wspólny katalog.
Inny będzie zapewne katalog bieżący przy uruchamianiu z konsoli lub z jara. Żeby działało zawsze możesz użyć zmodyfikowanej propozycji maszynaz (gdzieś tam trzeba wrzucić katalog images).

0

JComponent'owi trzeba ustawić setPreferredSize();

 
public class Main {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                Ramka frame = new Ramka();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
                
            }
        });
    }
}

class Ramka extends JFrame {


    public Ramka() {

        setSize(500, 400);

        JPanel panelPolnocny = new JPanel();
        JPanel panelPoludniowy = new JPanel();
        JPanel panelWschodni = new JPanel();
        JPanel panelZachodni = new JPanel();
        JPanel panelCentralny = new JPanel();

        panelPolnocny.setBackground(Color.RED);
        panelPoludniowy.setBackground(Color.BLUE);
        panelWschodni.setBackground(Color.CYAN);
        panelZachodni.setBackground(Color.GREEN);
       // panelCentralny.setBackground(Color.BLACK);

        ImageComponent1 component = new ImageComponent1();    
        component.setPreferredSize(new Dimension(1000,1000));
   
        
        panelCentralny.add(component);

        add(panelPolnocny, BorderLayout.NORTH);
        add(panelPoludniowy, BorderLayout.SOUTH);
        add(panelWschodni, BorderLayout.EAST);
        add(panelZachodni, BorderLayout.WEST);
        add(panelCentralny, BorderLayout.CENTER);
       
    }
}

class ImageComponent1 extends JComponent {

    Image image;
    public ImageComponent1() {
        try {
            image = ImageIO.read(new File("obrazek.png"));
        }
        catch (IOException e) {
             System.out.println(e);

        }
    }
    protected void paintComponent(Graphics g) {
    

        if (image == null) {
            return;
        }

        g.drawImage(image, 0, 0, null);
    }
}

a obrazek wrzuć do NetBeansProjects/TwojFolderProjektu/obrazek.png

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