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