Kłopot z rysowaniem obrazka

0

Witam wszystkich. Mam problem z narysowaniem obrazka w oknie.

public class Puzzle extends JPanel
{
	public BufferedImage biObraz;
	public Puzzle()
	{
		JFileChooser fc = new JFileChooser();
		if (fc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION);
		{
			File obraz = new File(String.valueOf(fc.getSelectedFile()));
			try 
			{
				biObraz = ImageIO.read(obraz);
			} 
			catch (IOException er) 
			{
				System.err.println("Błąd odczytu obrazka !");
				er.printStackTrace();
			}
		}
		Dimension dimension = new Dimension(biObraz.getWidth(), biObraz.getHeight());
		setPreferredSize(dimension);
	}
	
	public void paintComponent(Graphics g) 
	{
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D)g;
		g.drawImage(biObraz, 0, 0, this);
	}
}

public class ObrazFrame extends JFrame implements ActionListener
{
	private BufferedImage biObraz;
	private JMenuBar menuBar;
	private JMenu mPlik, mOpcje;
	private JMenuItem mOtworz, mWyjscie;
		
	public ObrazFrame() 
	{
		setSize(200,100);
		setTitle("Puzzle");
		setLayout(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		mPlik = new JMenu("Plik");
		menuBar.add(mPlik);
		mOpcje = new JMenu("Opcje");
		menuBar.add(mOpcje);
				
		mOtworz = new JMenuItem("Nowe zdjęcie");
		mPlik.add(mOtworz);
		mOtworz.addActionListener(this);
		mOtworz.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));
		
		mWyjscie = new JMenuItem("Wyjście");
		mPlik.add(mWyjscie);
		mWyjscie.addActionListener(this);
		mWyjscie.setAccelerator(KeyStroke.getKeyStroke("ctrl Q"));
		
	}
	
	public void actionPerformed(ActionEvent e) 
	{
		Object zrodlo = e.getSource();
		if (zrodlo==mWyjscie)
		{
			dispose();
		}
		else if (zrodlo==mOtworz)
		{
			Puzzle puzle = new Puzzle();
			add(puzle);
			pack();
		}
	}
	
}

Takie wywołanie po prostu skutkuje zmniejszeniem okna do minimum, a obrazek nie zostaje narysowany.
Nie wiem jak rozgryźć to dodanie obiektu "puzle" do panelu. Wiadomo, że jeśli te instrukcje:

Puzzle puzle = new Puzzle();
add(puzle);

Wpiszę do konstruktora ObrazFrame(), to obrazek zostanie wyświetlony, jednak wtedy nie będzie to wykonywane po działaniu na JFileChooser. Długo nad tym siedziałem, te przykłady w internecie, które widziałem nie pomogły, więc proszę o pomoc przy tym problemie.
Z góry dziękuję i proszę o odpowiedź ;)

0

wyrzuć z konstruktora pack

2

Sorki, to była moja zmiana :)
setSize daj na koncu konstruktora oraz ustaw Layout np. setLayout(new BorderLayout());

0

Dzięki wielkie, pomogło :)

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