Wczytwanie obrazka - problem

0

Witam
Pisze aplikacje ktora ma umozliwiac edycje obrazu. Ale zeby to zrobic najpierw musze go wczytac :) a z tym mam problem. Prosze o pomoc w jego rozwiazaniu. Oto kod programu:

package edytor;

import javax.imageio.ImageIO;
import javax.swing.;
import java.awt.
;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class Edytor extends JFrame {
private JMenuBar Mbar = new JMenuBar();
private JMenu[] Jmenu = {
new JMenu("Plik"), new JMenu("Edycja"), new JMenu("Info")
};
private JMenuItem[] Jmitems = {
new JMenuItem("Otworz"), new JMenuItem("Zapisz"), new JMenuItem("Przezroczystosc"),
new JMenuItem("Obróc"), new JMenuItem("Rozmiar"), new JMenuItem("Autor")
};

public Edytor()
{
	Zdarzenia zd = new Zdarzenia();
	for(int i = 0; i<Jmitems.length; i++)
	{
		Jmitems[i].addActionListener(zd);
		
		if(i<2)
		{
			Jmenu[0].add(Jmitems[i]);
		}
		
		if(i>=2 && i< 5)
		{
			Jmenu[1].add(Jmitems[i]);
		}
		
		else if(i>=5)
			Jmenu[2].add(Jmitems[i]);
	}
	
	for (int j=0; j<Jmenu.length; j++)
		Mbar.add(Jmenu[j]);
	
	setJMenuBar(Mbar);
	Jmitems[0].setActionCommand("0");
	Jmitems[1].setActionCommand("1");
	Jmitems[2].setActionCommand("2");
	Jmitems[3].setActionCommand("3");
	Jmitems[4].setActionCommand("4");
	Jmitems[5].setActionCommand("5");
	
	Container co = getContentPane();
	co.setLayout(new FlowLayout());
	setSize(new Dimension(400, 300));
	

}


public static void main(String[] args) {
	
	new Edytor().setVisible(true);
}

}

class Zdarzenia extends JPanel implements ActionListener
{
private JFileChooser chooser = new JFileChooser();
private BufferedImage image = null;
private File file;

public void actionPerformed(ActionEvent ev) {
	
	switch(Integer.parseInt(ev.getActionCommand()))
	{
		case 0:
		{	
		LoadImage();
		break;
		}
	
		case 1:
		{
		System.out.println("Zapisz");
		break;
		}
	}
	
}




public void LoadImage()
{
	int returnVal =  chooser.showOpenDialog(this);
	if(returnVal == JFileChooser.APPROVE_OPTION)
		 System.out.println("You chose to open this file: " +
		 chooser.getSelectedFile().getName());
	
	try
	{
	this.image = ImageIO.read(file);
	
	}
	catch(IOException e){}
}

@Override
public void paint(Graphics g)
{
	

	g.drawImage(this.image,100,100,null);
	
}
	

}

0

A jaki jest ten problem. Na czym polega? Doprecyzuj pytanie.

0

Chodzi o to ze mam MenuBar gdzie mam 3 zakladki. W pierwszej zakladce Plik sa 2 opcje do wyboru Otworz i Zapisz. Po kliknieciu na Otworz wybieram przez filechoosera plik graficzny i chcialbym zeby on mi sie wyswietlic, zebym mogl go potem jakos edytowac. Niestety po wybraniu pliku nic sie nie dzieje...

0
        public void LoadImage()
        {
                int returnVal =  chooser.showOpenDialog(this);
                if(returnVal == JFileChooser.APPROVE_OPTION)
                         System.out.println("You chose to open this file: " +
                         chooser.getSelectedFile().getName());
               
                try
                {
                this.image = ImageIO.read(file);
               
                }
                catch(IOException e){}
        }

Program ma zgadnąć co otworzyć? Brak przypisania file=...;

0

a jak przekazac do zmiennej file to co aktualnie otwieramy przez OpenDialog?

0

Masz zakaz korzystania z dokumentacji?

0

hehe "zakaz korzystania z dokumentacji":P dobre....

0

uwielbiam takich ludzi ktorzy najpierw oferuja pomoc, a potem staraja sie pokazac jacy to oni sa najmadrzejsi na swiecie.

0

File myFile = _fileChooser.getSelectedFile();

o to Ci chodzi ?

0

A ja uwielbiam takich leni. Dostałeś pomoc - wskazałem Ci błąd, i wskazówkę, że nazw metod szuka się w dokumentacji, a nie na forum.
Ale Tobie leniu nie chce się zajrzeć do dokumentacji, wstyd.

0

o to mi chodzilo tylko w dalszym ciagu nie wyswietla mi nic, co prawda nie ma zadnych bledow...ale przypisanie wartosci do file nie pomoglo.

0

Spróbuj

                        LoadImage();
                        repaint();
                        break;
0

Niestety tez nie dziala :/

0

Zmieniłem trochę konstruktor klasy Edytor

                //Container co = getContentPane(); //niepotrzebne
                //co.setLayout(new FlowLayout()); //może być, ale ja preferuję menadżera domyślnego
                setSize(new Dimension(400, 300));
		add(zd,BorderLayout.CENTER); //musi być
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //powinno być, u Ciebie zamknięcie okna nie kończy programu
0

dziala. Dzieki bardzo, a moglbys mi jeszcze wyjasnic czemu przedtem sie nie wyswietlalo a teraz sie wyswietla???

0

Kluczowa jest ta instrukcja

add(zd,BorderLayout.CENTER);

Ty tworzyłeś obiekt klasy Zdarzenie tylko w pamięci komputera, nigdy go nie wyświetlałeś. Ta instrukcja umieszcza go w oknie głównej klasy programu. A to okno jest wyświetlane:

new Edytor().setVisible(true);

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