Wyświetlanie obrazu przez JFileChooser

0

Witam,
mam pewien problem, nie wyświetla mi obrazka po jego wybraniu. Ty jest kod:

        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu plik = new JMenu("Plik");
        menuBar.add(plik);
            JMenuItem otworz = new JMenuItem("Otwórz");
            otworz.addActionListener(new FileOpenListener());
            JMenuItem wyjscie = new JMenuItem("Wyjśćie");
            wyjscie.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    int odp = JOptionPane.showConfirmDialog(null, "Czy napewno chcesz zamknąć ?", "Exit", JOptionPane.OK_CANCEL_OPTION);
                    if(odp == JOptionPane.OK_OPTION)
                        System.exit(0);

                }
            });

            plik.add(otworz);
            plik.add(wyjscie);

            chooser = new JFileChooser();

    }

    private class FileOpenListener implements ActionListener
    {

        @Override
        public void actionPerformed(ActionEvent ev) {

            int result = chooser.showOpenDialog(Frame.this);

            if(result == JFileChooser.APPROVE_OPTION)
            {
                File img = chooser.getSelectedFile();
                System.out.println(img.getName());

                try 
                {
                    image = ImageIO.read(img);
                }
                catch (IOException e) 
                {
                    System.err.println("Blad odczytu obrazka");
                }

            }
        }

    }
    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D)g;
        g2.drawImage(image,10,10,this);
    }
    private JFileChooser chooser;
    private BufferedImage image;

Z góry dziękuje.

0

Brakuje repaint().

0

Z repaint też nie działa :(

 image = ImageIO.read(img);
                    System.out.println("jestem");
                    repaint();
0

Zamieściłeś urywki kodu. Nie sposób się zorientować czy to repaint(); dotyczy komponentu, w którym jest metoda:

    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D)g;
        g2.drawImage(image,10,10,this);
    }
0

Sorki, o to pełen kod klasy Frame :

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JToolBar;

@SuppressWarnings("serial")
public class Frame extends JFrame{
    public Frame()
    {
        this.setSize(800,600);
        this.setTitle("Okno Wyboru plikow");
        this.setLocation(100, 100);

        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu plik = new JMenu("Plik");
        menuBar.add(plik);
            JMenuItem otworz = new JMenuItem("Otwórz");
            otworz.addActionListener(new FileOpenListener());
            JMenuItem wyjscie = new JMenuItem("Wyjśćie");
            wyjscie.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    int odp = JOptionPane.showConfirmDialog(null, "Czy napewno chcesz zamknąć ?", "Exit", JOptionPane.OK_CANCEL_OPTION);
                    if(odp == JOptionPane.OK_OPTION)
                        System.exit(0);

                }
            });

            plik.add(otworz);
            plik.add(wyjscie);

            JToolBar tool_bar = new JToolBar();
            add(tool_bar);
            Action kwadrat = new AbstractAction("Kwadrat", new ImageIcon("kwadrat.jpg")) 
            {

                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub

                }
            };

            Action kolo = new AbstractAction("Koło", new ImageIcon("kolo.jpg")) 
            {

                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub

                }
            };
            tool_bar.add(kwadrat);
            tool_bar.add(kolo);

            kwadrat.putValue(Action.SHORT_DESCRIPTION, "Kwadrat");
            kolo.putValue(Action.SHORT_DESCRIPTION, "Kolo");

            chooser = new JFileChooser();

    }

    private class FileOpenListener implements ActionListener
    {

        @Override
        public void actionPerformed(ActionEvent ev) {

            int result = chooser.showOpenDialog(Frame.this);

            if(result == JFileChooser.APPROVE_OPTION)
            {
                File img = chooser.getSelectedFile();
                System.out.println(img.getName());

                try 
                {
                    image = ImageIO.read(img);
                    repaint();
                }
                catch (IOException e) 
                {
                    System.err.println("Blad odczytu obrazka");
                }

            }
        }

    }
        public void paintComponent(Graphics g)
        {
            Graphics2D g2 = (Graphics2D)g;
            g2.drawImage(image,10,10,this);
            System.out.println("tutja");
        }
    private JFileChooser chooser;
    private BufferedImage image;
}
1

W konstruktorze klasy Frame (myląca nazwa, Frame to nazwa klasy bibliotecznej - z pakietu AWT - o bardzo podobnym przeznaczeniu):

this.setTitle("Okno wyboru plików");
this.setLocation(100, 100);
add(new Panelik(),BorderLayout.CENTER);
...
add(tool_bar,BorderLayout.NORTH);
pack();

a gdzieś w klasie dopisz kod

    private class Panelik extends JPanel
    {
        public Panelik()
        {
            setPreferredSize(new Dimension(800,600)); 
        }
        public void paintComponent(Graphics g)
        {
            Graphics2D g2 = (Graphics2D)g;
            g2.drawImage(image,10,10,null);
            System.out.println("tutja");
        }
    }
0

Wszystko działa, wielkie dzięki :)

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